{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "746fde64",
   "metadata": {
    "id": "VQmZkG47B96F",
    "papermill": {
     "duration": 0.016397,
     "end_time": "2024-03-23T07:04:13.906356",
     "exception": false,
     "start_time": "2024-03-23T07:04:13.889959",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# RNA-FM Tutorial"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95fca6d0",
   "metadata": {
    "papermill": {
     "duration": 0.015388,
     "end_time": "2024-03-23T07:04:13.937465",
     "exception": false,
     "start_time": "2024-03-23T07:04:13.922077",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Workflow of our tutorial\n",
    "\n",
    "**Preparation**\n",
    "1. install the RNA-FM package\n",
    "2. load the necessary libraries\n",
    "\n",
    "**Task 1. RNA family clustering**\n",
    "\n",
    "Goal: to demonstrate that RNA-FM embeddings are biologically meaningful\n",
    "\n",
    "1. read RNA sequences for each family from FASTA files\n",
    "2. generate the RNA-FM embeddings for each sequence\n",
    "3. t-SNE dimension reduction on the generated embeddings\n",
    "4. plot the embeddings in the 2D space\n",
    "\n",
    "**Task 2. RNA type classification**\n",
    "\n",
    "Goal: to demonstrate how to use RNA-FM for downstream applications\n",
    "\n",
    "1. read RNA sequences for each type from a FASTA file\n",
    "2. generate RNA-FM embeddings for each sequence\n",
    "3. build the dataset and model\n",
    "4. train and validate the model\n",
    "5. test the model on a dataset excluded from training"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4aa92c60",
   "metadata": {
    "id": "Cqup0jpT_vC2",
    "papermill": {
     "duration": 0.015428,
     "end_time": "2024-03-23T07:04:13.969776",
     "exception": false,
     "start_time": "2024-03-23T07:04:13.954348",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Install RNA-FM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7c3a2774",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:04:14.002582Z",
     "iopub.status.busy": "2024-03-23T07:04:14.002281Z",
     "iopub.status.idle": "2024-03-23T07:05:11.183082Z",
     "shell.execute_reply": "2024-03-23T07:05:11.182112Z"
    },
    "executionInfo": {
     "elapsed": 5350,
     "status": "ok",
     "timestamp": 1711116729270,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "UjmcCX_WRKJ9",
    "outputId": "f91bf8c2-3402-467c-e4f5-f671441b1a09",
    "papermill": {
     "duration": 57.200114,
     "end_time": "2024-03-23T07:05:11.185586",
     "exception": false,
     "start_time": "2024-03-23T07:04:13.985472",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting rna-fm\r\n",
      "  Downloading rna_fm-0.2.1-py3-none-any.whl.metadata (10 kB)\r\n",
      "Collecting numpy==1.22.0 (from rna-fm)\r\n",
      "  Downloading numpy-1.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.0 kB)\r\n",
      "Collecting pandas==1.3.5 (from rna-fm)\r\n",
      "  Downloading pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\r\n",
      "Collecting tqdm==4.62 (from rna-fm)\r\n",
      "  Downloading tqdm-4.62.0-py2.py3-none-any.whl.metadata (57 kB)\r\n",
      "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.2/57.2 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hRequirement already satisfied: scikit-learn in /opt/conda/lib/python3.10/site-packages (from rna-fm) (1.2.2)\r\n",
      "Collecting ptflops (from rna-fm)\r\n",
      "  Downloading ptflops-0.7.2.2-py3-none-any.whl.metadata (7.2 kB)\r\n",
      "Requirement already satisfied: python-dateutil>=2.7.3 in /opt/conda/lib/python3.10/site-packages (from pandas==1.3.5->rna-fm) (2.9.0.post0)\r\n",
      "Requirement already satisfied: pytz>=2017.3 in /opt/conda/lib/python3.10/site-packages (from pandas==1.3.5->rna-fm) (2023.3.post1)\r\n",
      "Requirement already satisfied: torch in /opt/conda/lib/python3.10/site-packages (from ptflops->rna-fm) (2.1.2)\r\n",
      "Requirement already satisfied: scipy>=1.3.2 in /opt/conda/lib/python3.10/site-packages (from scikit-learn->rna-fm) (1.11.4)\r\n",
      "Requirement already satisfied: joblib>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from scikit-learn->rna-fm) (1.3.2)\r\n",
      "Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from scikit-learn->rna-fm) (3.2.0)\r\n",
      "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.7.3->pandas==1.3.5->rna-fm) (1.16.0)\r\n",
      "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from torch->ptflops->rna-fm) (3.13.1)\r\n",
      "Requirement already satisfied: typing-extensions in /opt/conda/lib/python3.10/site-packages (from torch->ptflops->rna-fm) (4.9.0)\r\n",
      "Requirement already satisfied: sympy in /opt/conda/lib/python3.10/site-packages (from torch->ptflops->rna-fm) (1.12)\r\n",
      "Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from torch->ptflops->rna-fm) (3.2.1)\r\n",
      "Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from torch->ptflops->rna-fm) (3.1.2)\r\n",
      "Requirement already satisfied: fsspec in /opt/conda/lib/python3.10/site-packages (from torch->ptflops->rna-fm) (2024.3.0)\r\n",
      "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from jinja2->torch->ptflops->rna-fm) (2.1.3)\r\n",
      "Requirement already satisfied: mpmath>=0.19 in /opt/conda/lib/python3.10/site-packages (from sympy->torch->ptflops->rna-fm) (1.3.0)\r\n",
      "Downloading rna_fm-0.2.1-py3-none-any.whl (46 kB)\r\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.6/46.6 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hDownloading numpy-1.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)\r\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.8/16.8 MB\u001b[0m \u001b[31m82.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hDownloading pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.5 MB)\r\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.5/11.5 MB\u001b[0m \u001b[31m84.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hDownloading tqdm-4.62.0-py2.py3-none-any.whl (76 kB)\r\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m76.0/76.0 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hDownloading ptflops-0.7.2.2-py3-none-any.whl (15 kB)\r\n",
      "Installing collected packages: tqdm, numpy, pandas, ptflops, rna-fm\r\n",
      "  Attempting uninstall: tqdm\r\n",
      "    Found existing installation: tqdm 4.66.1\r\n",
      "    Uninstalling tqdm-4.66.1:\r\n",
      "      Successfully uninstalled tqdm-4.66.1\r\n",
      "  Attempting uninstall: numpy\r\n",
      "    Found existing installation: numpy 1.26.4\r\n",
      "    Uninstalling numpy-1.26.4:\r\n",
      "      Successfully uninstalled numpy-1.26.4\r\n",
      "  Attempting uninstall: pandas\r\n",
      "    Found existing installation: pandas 2.1.4\r\n",
      "    Uninstalling pandas-2.1.4:\r\n",
      "      Successfully uninstalled pandas-2.1.4\r\n",
      "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n",
      "cudf 23.8.0 requires cubinlinker, which is not installed.\r\n",
      "cudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\r\n",
      "cudf 23.8.0 requires ptxcompiler, which is not installed.\r\n",
      "cuml 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\r\n",
      "dask-cudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\r\n",
      "keras-cv 0.8.2 requires keras-core, which is not installed.\r\n",
      "keras-nlp 0.8.2 requires keras-core, which is not installed.\r\n",
      "tensorflow-decision-forests 1.8.1 requires wurlitzer, which is not installed.\r\n",
      "albumentations 1.4.0 requires numpy>=1.24.4, but you have numpy 1.22.0 which is incompatible.\r\n",
      "apache-beam 2.46.0 requires dill<0.3.2,>=0.3.1.1, but you have dill 0.3.8 which is incompatible.\r\n",
      "apache-beam 2.46.0 requires pyarrow<10.0.0,>=3.0.0, but you have pyarrow 11.0.0 which is incompatible.\r\n",
      "arviz 0.17.1 requires pandas>=1.4.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "beatrix-jupyterlab 2023.128.151533 requires jupyterlab~=3.6.0, but you have jupyterlab 4.1.5 which is incompatible.\r\n",
      "chex 0.1.85 requires numpy>=1.24.1, but you have numpy 1.22.0 which is incompatible.\r\n",
      "cudf 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.4.0 which is incompatible.\r\n",
      "cudf 23.8.0 requires protobuf<5,>=4.21, but you have protobuf 3.20.3 which is incompatible.\r\n",
      "cuml 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "dask-cuda 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "dask-cudf 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "dask-expr 1.0.4 requires pandas>=2, but you have pandas 1.3.5 which is incompatible.\r\n",
      "datasets 2.1.0 requires tqdm>=4.62.1, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "dipy 1.9.0 requires numpy>=1.22.4, but you have numpy 1.22.0 which is incompatible.\r\n",
      "esda 2.5.1 requires pandas>1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "featuretools 1.30.0 requires numpy>=1.25.0, but you have numpy 1.22.0 which is incompatible.\r\n",
      "featuretools 1.30.0 requires pandas>=2.0.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "fitter 1.7.0 requires tqdm<5.0.0,>=4.65.1, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "geopandas 0.14.3 requires pandas>=1.4.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "inequality 1.0.1 requires numpy>=1.23, but you have numpy 1.22.0 which is incompatible.\r\n",
      "libpysal 4.9.2 requires packaging>=22, but you have packaging 21.3 which is incompatible.\r\n",
      "libpysal 4.9.2 requires pandas>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "libpysal 4.9.2 requires shapely>=2.0.1, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "librosa 0.10.1 requires numpy!=1.22.0,!=1.22.1,!=1.22.2,>=1.20.3, but you have numpy 1.22.0 which is incompatible.\r\n",
      "mapclassify 2.6.1 requires numpy>=1.23, but you have numpy 1.22.0 which is incompatible.\r\n",
      "mapclassify 2.6.1 requires pandas!=1.5.0,>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "mizani 0.11.0 requires numpy>=1.23.0, but you have numpy 1.22.0 which is incompatible.\r\n",
      "mizani 0.11.0 requires pandas>=2.1.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "momepy 0.7.0 requires shapely>=2, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "momepy 0.7.0 requires tqdm>=4.63.0, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "osmnx 1.9.1 requires shapely>=2.0, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "plotnine 0.13.2 requires numpy>=1.23.0, but you have numpy 1.22.0 which is incompatible.\r\n",
      "plotnine 0.13.2 requires pandas<3.0.0,>=2.1.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "pyldavis 3.4.1 requires numpy>=1.24.2, but you have numpy 1.22.0 which is incompatible.\r\n",
      "pyldavis 3.4.1 requires pandas>=2.0.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "pylibraft 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.4.0 which is incompatible.\r\n",
      "pywavelets 1.5.0 requires numpy<2.0,>=1.22.4, but you have numpy 1.22.0 which is incompatible.\r\n",
      "raft-dask 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "rmm 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.4.0 which is incompatible.\r\n",
      "spaghetti 1.7.5.post1 requires pandas!=1.5.0,>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "spglm 1.1.0 requires numpy>=1.23, but you have numpy 1.22.0 which is incompatible.\r\n",
      "spopt 0.6.0 requires pandas!=1.5.0,>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "spopt 0.6.0 requires shapely>=2.0.1, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "spopt 0.6.0 requires tqdm>=4.63.0, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "spreg 1.4.2 requires numpy>=1.23, but you have numpy 1.22.0 which is incompatible.\r\n",
      "tensorflow 2.15.0 requires keras<2.16,>=2.15.0, but you have keras 3.0.5 which is incompatible.\r\n",
      "tensorflow 2.15.0 requires numpy<2.0.0,>=1.23.5, but you have numpy 1.22.0 which is incompatible.\r\n",
      "tensorstore 0.1.56 requires ml-dtypes>=0.3.1, but you have ml-dtypes 0.2.0 which is incompatible.\r\n",
      "woodwork 0.29.0 requires numpy>=1.25.0, but you have numpy 1.22.0 which is incompatible.\r\n",
      "woodwork 0.29.0 requires pandas>=1.4.3, but you have pandas 1.3.5 which is incompatible.\r\n",
      "xarray 2024.2.0 requires numpy>=1.23, but you have numpy 1.22.0 which is incompatible.\r\n",
      "xarray 2024.2.0 requires packaging>=22, but you have packaging 21.3 which is incompatible.\r\n",
      "xarray 2024.2.0 requires pandas>=1.5, but you have pandas 1.3.5 which is incompatible.\u001b[0m\u001b[31m\r\n",
      "\u001b[0mSuccessfully installed numpy-1.22.0 pandas-1.3.5 ptflops-0.7.2.2 rna-fm-0.2.1 tqdm-4.62.0\r\n",
      "Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (1.22.0)\r\n",
      "Collecting numpy\r\n",
      "  Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\r\n",
      "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.0/61.0 kB\u001b[0m \u001b[31m3.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hDownloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\r\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.2/18.2 MB\u001b[0m \u001b[31m71.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hInstalling collected packages: numpy\r\n",
      "  Attempting uninstall: numpy\r\n",
      "    Found existing installation: numpy 1.22.0\r\n",
      "    Uninstalling numpy-1.22.0:\r\n",
      "      Successfully uninstalled numpy-1.22.0\r\n",
      "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n",
      "cudf 23.8.0 requires cubinlinker, which is not installed.\r\n",
      "cudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\r\n",
      "cudf 23.8.0 requires ptxcompiler, which is not installed.\r\n",
      "cuml 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\r\n",
      "dask-cudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\r\n",
      "keras-nlp 0.8.2 requires keras-core, which is not installed.\r\n",
      "tensorflow-decision-forests 1.8.1 requires wurlitzer, which is not installed.\r\n",
      "apache-beam 2.46.0 requires dill<0.3.2,>=0.3.1.1, but you have dill 0.3.8 which is incompatible.\r\n",
      "apache-beam 2.46.0 requires numpy<1.25.0,>=1.14.3, but you have numpy 1.26.4 which is incompatible.\r\n",
      "apache-beam 2.46.0 requires pyarrow<10.0.0,>=3.0.0, but you have pyarrow 11.0.0 which is incompatible.\r\n",
      "arviz 0.17.1 requires pandas>=1.4.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "cudf 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.4.0 which is incompatible.\r\n",
      "cudf 23.8.0 requires protobuf<5,>=4.21, but you have protobuf 3.20.3 which is incompatible.\r\n",
      "cuml 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "dask-cuda 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "dask-cudf 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "datasets 2.1.0 requires tqdm>=4.62.1, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "featuretools 1.30.0 requires pandas>=2.0.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "fitter 1.7.0 requires tqdm<5.0.0,>=4.65.1, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "libpysal 4.9.2 requires packaging>=22, but you have packaging 21.3 which is incompatible.\r\n",
      "libpysal 4.9.2 requires pandas>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "libpysal 4.9.2 requires shapely>=2.0.1, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "mapclassify 2.6.1 requires pandas!=1.5.0,>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "mizani 0.11.0 requires pandas>=2.1.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "momepy 0.7.0 requires shapely>=2, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "momepy 0.7.0 requires tqdm>=4.63.0, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "osmnx 1.9.1 requires shapely>=2.0, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "plotnine 0.13.2 requires pandas<3.0.0,>=2.1.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "pyldavis 3.4.1 requires pandas>=2.0.0, but you have pandas 1.3.5 which is incompatible.\r\n",
      "pylibraft 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.4.0 which is incompatible.\r\n",
      "raft-dask 23.8.0 requires dask==2023.7.1, but you have dask 2024.3.1 which is incompatible.\r\n",
      "rmm 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.4.0 which is incompatible.\r\n",
      "rna-fm 0.2.1 requires numpy==1.22.0, but you have numpy 1.26.4 which is incompatible.\r\n",
      "spaghetti 1.7.5.post1 requires pandas!=1.5.0,>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "spopt 0.6.0 requires pandas!=1.5.0,>=1.4, but you have pandas 1.3.5 which is incompatible.\r\n",
      "spopt 0.6.0 requires shapely>=2.0.1, but you have shapely 1.8.5.post1 which is incompatible.\r\n",
      "spopt 0.6.0 requires tqdm>=4.63.0, but you have tqdm 4.62.0 which is incompatible.\r\n",
      "tensorflow 2.15.0 requires keras<2.16,>=2.15.0, but you have keras 3.0.5 which is incompatible.\r\n",
      "tensorstore 0.1.56 requires ml-dtypes>=0.3.1, but you have ml-dtypes 0.2.0 which is incompatible.\r\n",
      "woodwork 0.29.0 requires pandas>=1.4.3, but you have pandas 1.3.5 which is incompatible.\r\n",
      "xarray 2024.2.0 requires packaging>=22, but you have packaging 21.3 which is incompatible.\r\n",
      "xarray 2024.2.0 requires pandas>=1.5, but you have pandas 1.3.5 which is incompatible.\r\n",
      "ydata-profiling 4.6.4 requires numpy<1.26,>=1.16.0, but you have numpy 1.26.4 which is incompatible.\u001b[0m\u001b[31m\r\n",
      "\u001b[0mSuccessfully installed numpy-1.26.4\r\n",
      "Collecting biopython\r\n",
      "  Downloading biopython-1.83-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)\r\n",
      "Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (from biopython) (1.26.4)\r\n",
      "Downloading biopython-1.83-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\r\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m65.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
      "\u001b[?25hInstalling collected packages: biopython\r\n",
      "Successfully installed biopython-1.83\r\n"
     ]
    }
   ],
   "source": [
    "!pip install rna-fm\n",
    "!pip install -U numpy\n",
    "!pip install biopython"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "775d632b",
   "metadata": {
    "id": "p9ETAJQcNQoZ",
    "papermill": {
     "duration": 0.01965,
     "end_time": "2024-03-23T07:05:11.225493",
     "exception": false,
     "start_time": "2024-03-23T07:05:11.205843",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "If pip install fails to install the required packages, we can also uncomment the following cell to install it from source."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ff6a3c10",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:11.265835Z",
     "iopub.status.busy": "2024-03-23T07:05:11.265513Z",
     "iopub.status.idle": "2024-03-23T07:05:11.269747Z",
     "shell.execute_reply": "2024-03-23T07:05:11.268952Z"
    },
    "id": "rdqDw0G4B7HZ",
    "papermill": {
     "duration": 0.026665,
     "end_time": "2024-03-23T07:05:11.271627",
     "exception": false,
     "start_time": "2024-03-23T07:05:11.244962",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# !git clone https://github.com/ml4bio/RNA-FM.git\n",
    "\n",
    "# !pwd\n",
    "# !ls\n",
    "# %cd /content/RNA-FM\n",
    "# !python setup.py install"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0fe22386",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:11.311573Z",
     "iopub.status.busy": "2024-03-23T07:05:11.311313Z",
     "iopub.status.idle": "2024-03-23T07:05:19.695732Z",
     "shell.execute_reply": "2024-03-23T07:05:19.694737Z"
    },
    "executionInfo": {
     "elapsed": 454,
     "status": "ok",
     "timestamp": 1711122062448,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "umxEPuSrXp4G",
    "papermill": {
     "duration": 8.407069,
     "end_time": "2024-03-23T07:05:19.698172",
     "exception": false,
     "start_time": "2024-03-23T07:05:11.291103",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import fm  # for development with RNA-FM\n",
    "\n",
    "from pathlib import Path\n",
    "import glob\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "\n",
    "import numpy as np\n",
    "import math\n",
    "\n",
    "from Bio import SeqIO  # for file parsing\n",
    "\n",
    "from sklearn.manifold import TSNE  # for dimension reduction\n",
    "\n",
    "from sklearn.model_selection import train_test_split  # for splitting train/val/test\n",
    "\n",
    "from tqdm.notebook import tqdm  # for showing progress\n",
    "\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8afb50db",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:19.738903Z",
     "iopub.status.busy": "2024-03-23T07:05:19.738445Z",
     "iopub.status.idle": "2024-03-23T07:05:19.784113Z",
     "shell.execute_reply": "2024-03-23T07:05:19.783161Z"
    },
    "executionInfo": {
     "elapsed": 545,
     "status": "ok",
     "timestamp": 1711122065005,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "khGydI8MlM-c",
    "outputId": "d9a16848-1333-4124-b4c4-ad05c612d0bf",
    "papermill": {
     "duration": 0.067954,
     "end_time": "2024-03-23T07:05:19.786119",
     "exception": false,
     "start_time": "2024-03-23T07:05:19.718165",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "using cuda device\n"
     ]
    }
   ],
   "source": [
    "if torch.cuda.is_available():\n",
    "    device = 'cuda'\n",
    "else:\n",
    "    device = 'cpu'\n",
    "\n",
    "print(f'using {device} device')\n",
    "\n",
    "data_dir = '../input/rnafm-tutorial/'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0ee37a2",
   "metadata": {
    "id": "n4f28w4cBMUd",
    "papermill": {
     "duration": 0.01981,
     "end_time": "2024-03-23T07:05:19.826775",
     "exception": false,
     "start_time": "2024-03-23T07:05:19.806965",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Task 1. RNA Family Clustering"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e4398b4",
   "metadata": {
    "id": "wSa3VO1uBVoT",
    "papermill": {
     "duration": 0.021396,
     "end_time": "2024-03-23T07:05:19.868930",
     "exception": false,
     "start_time": "2024-03-23T07:05:19.847534",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0de806d2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:19.914259Z",
     "iopub.status.busy": "2024-03-23T07:05:19.913513Z",
     "iopub.status.idle": "2024-03-23T07:05:19.931148Z",
     "shell.execute_reply": "2024-03-23T07:05:19.930242Z"
    },
    "executionInfo": {
     "elapsed": 398,
     "status": "ok",
     "timestamp": 1711091454252,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "ZxkoDEJYUS-z",
    "outputId": "1d4de78d-f33f-4050-a901-abd39401e154",
    "papermill": {
     "duration": 0.042111,
     "end_time": "2024-03-23T07:05:19.932982",
     "exception": false,
     "start_time": "2024-03-23T07:05:19.890871",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n"
     ]
    }
   ],
   "source": [
    "# load fasta data\n",
    "fasta_paths = glob.glob(f'{data_dir}/RF*.fasta')\n",
    "fasta_paths.sort()\n",
    "print(len(fasta_paths))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "427da794",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:19.974251Z",
     "iopub.status.busy": "2024-03-23T07:05:19.973529Z",
     "iopub.status.idle": "2024-03-23T07:05:20.040260Z",
     "shell.execute_reply": "2024-03-23T07:05:20.039333Z"
    },
    "executionInfo": {
     "elapsed": 308,
     "status": "ok",
     "timestamp": 1711091456489,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "T9EHFsvuUoMH",
    "outputId": "66266e1a-711a-4fba-d366-91f317532d50",
    "papermill": {
     "duration": 0.089048,
     "end_time": "2024-03-23T07:05:20.042254",
     "exception": false,
     "start_time": "2024-03-23T07:05:19.953206",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RF00001\n",
      "712 712\n",
      "RF00005\n",
      "1666 1666\n",
      "RF00010\n",
      "2124 2124\n"
     ]
    }
   ],
   "source": [
    "rfam_list = []  # list of RNA families\n",
    "\n",
    "seqs = []  # list of two-element tuples [(sequence ID, sequence),]\n",
    "labels = []  # list of labels correspond to each entry in the seqs list, the labels are the RNA families\n",
    "\n",
    "for fasta_path in fasta_paths:\n",
    "    rfam = Path(fasta_path).stem\n",
    "    rfam_list.append(rfam)\n",
    "    print(rfam)\n",
    "\n",
    "    records = list(SeqIO.parse(fasta_path, 'fasta'))\n",
    "\n",
    "    fasta_seqs = [str(record.seq) for record in records]\n",
    "    fasta_seq_names = [record.id for record in records]\n",
    "\n",
    "    seqs += [(seq_name, seq) for seq_name, seq in zip(fasta_seq_names, fasta_seqs)]\n",
    "\n",
    "    labels += [rfam] * len(fasta_seq_names)\n",
    "\n",
    "    print(len(seqs), len(labels))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d2df2f67",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:20.083105Z",
     "iopub.status.busy": "2024-03-23T07:05:20.082830Z",
     "iopub.status.idle": "2024-03-23T07:05:20.086948Z",
     "shell.execute_reply": "2024-03-23T07:05:20.086192Z"
    },
    "executionInfo": {
     "elapsed": 4,
     "status": "ok",
     "timestamp": 1711091470168,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "4oN1RMAuZvwA",
    "outputId": "a0e471db-f544-4fd9-fe32-22d6e0330084",
    "papermill": {
     "duration": 0.026734,
     "end_time": "2024-03-23T07:05:20.089143",
     "exception": false,
     "start_time": "2024-03-23T07:05:20.062409",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[('X01556.1/3-118', 'CUUGACGAUCAUAGAGCGUUGGAACCACCUGAUCCCUUCCCGAACUCAGAAGUGAAACGACGCAUCGCCGAUGGUAGUGUGGGGUUUCCCCAUGUGAGAGUAGGUCAUCGUCAAGC'), ('X55260.1/3-119', 'UACGGCGGCCAUAGCGAAGGGGAAAUACCCGGUCCCAUCCCGAACCCGGAAGUCAAGCCCUUCAGCGCCGAUGGUACUGCAACCGAGAGGCUGUGGGAGAGUAGGACGCCGCCGGAC')]\n"
     ]
    }
   ],
   "source": [
    "# examine the data\n",
    "print(seqs[:2])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1932db53",
   "metadata": {
    "id": "YELqpHoxBX_0",
    "papermill": {
     "duration": 0.019392,
     "end_time": "2024-03-23T07:05:20.128065",
     "exception": false,
     "start_time": "2024-03-23T07:05:20.108673",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Load the pretrained model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9df1603a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:20.168556Z",
     "iopub.status.busy": "2024-03-23T07:05:20.168309Z",
     "iopub.status.idle": "2024-03-23T07:05:20.172299Z",
     "shell.execute_reply": "2024-03-23T07:05:20.171124Z"
    },
    "executionInfo": {
     "elapsed": 26893,
     "status": "ok",
     "timestamp": 1711095721366,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "bR9pTFeXPt8_",
    "outputId": "76d3a843-8a2b-426a-bb6a-17d38b5db771",
    "papermill": {
     "duration": 0.026251,
     "end_time": "2024-03-23T07:05:20.174251",
     "exception": false,
     "start_time": "2024-03-23T07:05:20.148000",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# !gdown 1zflX5hHTxuwqcZm6A1npq7ubP8m7LdNX"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "bc53284d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:20.215024Z",
     "iopub.status.busy": "2024-03-23T07:05:20.214781Z",
     "iopub.status.idle": "2024-03-23T07:05:31.456995Z",
     "shell.execute_reply": "2024-03-23T07:05:31.456131Z"
    },
    "executionInfo": {
     "elapsed": 6345,
     "status": "ok",
     "timestamp": 1711104421072,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "pjh3_SmKWu6q",
    "outputId": "f7d087a1-c802-49df-9156-7069099a9c02",
    "papermill": {
     "duration": 11.26498,
     "end_time": "2024-03-23T07:05:31.459049",
     "exception": false,
     "start_time": "2024-03-23T07:05:20.194069",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BioBertModel(\n",
       "  (embed_tokens): Embedding(25, 640, padding_idx=1)\n",
       "  (layers): ModuleList(\n",
       "    (0-11): 12 x TransformerLayer(\n",
       "      (self_attn): MultiheadAttention(\n",
       "        (k_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "        (v_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "        (q_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "        (out_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "      )\n",
       "      (self_attn_layer_norm): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "      (fc1): Linear(in_features=640, out_features=5120, bias=True)\n",
       "      (fc2): Linear(in_features=5120, out_features=640, bias=True)\n",
       "      (final_layer_norm): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "    )\n",
       "  )\n",
       "  (contact_head): ContactPredictionHead(\n",
       "    (regression): Linear(in_features=240, out_features=1, bias=True)\n",
       "    (activation): Sigmoid()\n",
       "  )\n",
       "  (embed_positions): LearnedPositionalEmbedding(1026, 640, padding_idx=1)\n",
       "  (emb_layer_norm_before): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "  (emb_layer_norm_after): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "  (lm_head): RobertaLMHead(\n",
       "    (dense): Linear(in_features=640, out_features=640, bias=True)\n",
       "    (layer_norm): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load RNA-FM model\n",
    "fm_model, alphabet = fm.pretrained.rna_fm_t12(Path(data_dir, 'RNA-FM_pretrained.pth'))\n",
    "batch_converter = alphabet.get_batch_converter()\n",
    "\n",
    "fm_model.to(device)  # use GPU if available\n",
    "\n",
    "fm_model.eval()  # disables dropout for deterministic results"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d081659e",
   "metadata": {
    "id": "8xlkZNMFBdBc",
    "papermill": {
     "duration": 0.020088,
     "end_time": "2024-03-23T07:05:31.505629",
     "exception": false,
     "start_time": "2024-03-23T07:05:31.485541",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Retrieve RNA-FM embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e883a438",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:31.546515Z",
     "iopub.status.busy": "2024-03-23T07:05:31.546187Z",
     "iopub.status.idle": "2024-03-23T07:05:50.109815Z",
     "shell.execute_reply": "2024-03-23T07:05:50.108731Z"
    },
    "executionInfo": {
     "elapsed": 9396,
     "status": "ok",
     "timestamp": 1711091605265,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "YHCET12fdB17",
    "outputId": "37988d49-5217-4cb1-df3f-669123569ae2",
    "papermill": {
     "duration": 18.588466,
     "end_time": "2024-03-23T07:05:50.113870",
     "exception": false,
     "start_time": "2024-03-23T07:05:31.525404",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e7e0a5142b064321ae152e3b392595e3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/107 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2124, 1024, 640)\n"
     ]
    }
   ],
   "source": [
    "chunk_size = 20\n",
    "\n",
    "# pre-allocate the space to save memory\n",
    "token_embeddings = np.zeros((len(labels), 1024, 640))\n",
    "\n",
    "# divide all the sequences into chunks for processing due to the GPU memory limit\n",
    "for i in tqdm(range(0, len(seqs), chunk_size)):\n",
    "    data = seqs[i:i+chunk_size]\n",
    "\n",
    "    batch_labels, batch_strs, batch_tokens = batch_converter(data)\n",
    "\n",
    "    # use GPU\n",
    "    with torch.no_grad():\n",
    "        results = fm_model(batch_tokens.to(device), repr_layers=[12])\n",
    "\n",
    "    emb = results['representations'][12].cpu().numpy()\n",
    "\n",
    "    token_embeddings[i:i+chunk_size, :emb.shape[1], :] = emb\n",
    "\n",
    "\n",
    "print(token_embeddings.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44479821",
   "metadata": {
    "id": "brIEr7RGBiQ1",
    "papermill": {
     "duration": 0.020071,
     "end_time": "2024-03-23T07:05:50.157774",
     "exception": false,
     "start_time": "2024-03-23T07:05:50.137703",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Dimension reduction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "5c2c4fab",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:50.242768Z",
     "iopub.status.busy": "2024-03-23T07:05:50.241928Z",
     "iopub.status.idle": "2024-03-23T07:05:53.898343Z",
     "shell.execute_reply": "2024-03-23T07:05:53.897308Z"
    },
    "executionInfo": {
     "elapsed": 413,
     "status": "ok",
     "timestamp": 1711091607521,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "eFjCwdlHeNpq",
    "outputId": "7083fd9f-22dc-42e2-9f79-9688d8112d7b",
    "papermill": {
     "duration": 3.722044,
     "end_time": "2024-03-23T07:05:53.900349",
     "exception": false,
     "start_time": "2024-03-23T07:05:50.178305",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2124, 640)\n"
     ]
    }
   ],
   "source": [
    "token_embeddings = np.mean(token_embeddings, axis=1)\n",
    "\n",
    "print(token_embeddings.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "eb57ce04",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:05:53.942774Z",
     "iopub.status.busy": "2024-03-23T07:05:53.942279Z",
     "iopub.status.idle": "2024-03-23T07:06:02.635187Z",
     "shell.execute_reply": "2024-03-23T07:06:02.633891Z"
    },
    "id": "VgBoYvYSteYX",
    "papermill": {
     "duration": 8.716425,
     "end_time": "2024-03-23T07:06:02.637427",
     "exception": false,
     "start_time": "2024-03-23T07:05:53.921002",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Exception ignored on calling ctypes callback function: <function ThreadpoolController._find_libraries_with_dl_iterate_phdr.<locals>.match_library_callback at 0x7b29ec999cf0>\n",
      "Traceback (most recent call last):\n",
      "  File \"/opt/conda/lib/python3.10/site-packages/threadpoolctl.py\", line 847, in match_library_callback\n",
      "    self._make_controller_from_path(filepath)\n",
      "  File \"/opt/conda/lib/python3.10/site-packages/threadpoolctl.py\", line 984, in _make_controller_from_path\n",
      "    lib_controller = controller_class(filepath=filepath, prefix=prefix)\n",
      "  File \"/opt/conda/lib/python3.10/site-packages/threadpoolctl.py\", line 111, in __init__\n",
      "    self.dynlib = ctypes.CDLL(filepath, mode=_RTLD_NOLOAD)\n",
      "  File \"/opt/conda/lib/python3.10/ctypes/__init__.py\", line 374, in __init__\n",
      "    self._handle = _dlopen(self._name, mode)\n",
      "OSError: dlopen() error\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2124, 2)\n"
     ]
    }
   ],
   "source": [
    "# t-SNE\n",
    "tsne = TSNE(n_components=2, random_state=42)  # n_components is the dimension of the reduced data\n",
    "\n",
    "embeddings = tsne.fit_transform(token_embeddings)\n",
    "\n",
    "print(embeddings.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "105548d5",
   "metadata": {
    "id": "kOSrOTj3Bmko",
    "papermill": {
     "duration": 0.02045,
     "end_time": "2024-03-23T07:06:02.678936",
     "exception": false,
     "start_time": "2024-03-23T07:06:02.658486",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "02970841",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:02.722384Z",
     "iopub.status.busy": "2024-03-23T07:06:02.722041Z",
     "iopub.status.idle": "2024-03-23T07:06:02.920118Z",
     "shell.execute_reply": "2024-03-23T07:06:02.919064Z"
    },
    "executionInfo": {
     "elapsed": 1235,
     "status": "ok",
     "timestamp": 1711091635807,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "t-LhpSNZlXny",
    "outputId": "779788e0-7d65-449d-d673-1e981aceeb6b",
    "papermill": {
     "duration": 0.22277,
     "end_time": "2024-03-23T07:06:02.922291",
     "exception": false,
     "start_time": "2024-03-23T07:06:02.699521",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['RF00001', 'RF00005', 'RF00010']\n",
      "0\n",
      "1\n",
      "2\n"
     ]
    },
    {
     "data": {
      "image/png": "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y44dO/izP/uzgeOTo4/5+fksX76cF154gZtvvjnt9R0OB4lEIu1r6di7dy933303t99+O6AignV1dWN9rHEhAlAQZiPJEb2SdVC8UqU2nTlQsn5wDq5FpgicieriRQPdpa659BrY8dmh4srqPj7+hKpBzF8yfB1jnbObLPrCfhXJTIww0SQSVF3AiVj/GvpraKwUtCUcUwVyqAs0TX14K6B4WeZ1TPc4PUEYIzlbtgAMqQGcbt73vvdx77338i//8i/cc889w17/y7/8S+6//35qa2u58847ASgqKmLRokX827/9G0uWLKG+vp4vfelLQ8773ve+x5IlS7j66qvRdZ1f/OIXlJeXU1hYyK233sp1113HH/7hH/Ltb3+btWvX0tzczNNPP83tt9/Olkl6H/7lX/6FNWvWcNlll/H973+f7u5uPvaxjwGwZs0aHnnkEX7729+yYsUK/uM//oODBw+yYsWKgfO/9rWv8alPfYrS0lJuu+02gsEge/fu5bOf/SzAgEC8/vrrcblcFBUVjbieNWvW8F//9V+85z3vQdM0/u///b8DqfOpRgSgIMxGUiN6VdtVo8VY592u2tU/W7dOpZBLN8D1/2u4+MrUfbzpA0PXMZa0at1e2P1tJf5iIWX6vPIt6b0BAZxeKKhKaoDxZm5uGdJJvCRzatp6tpkapycIY0TT9Smv+RsNu93OZz7zGb797W/z6U9/etjrxcXFfPGLX+TLX/7ywD5d13nsscf43Oc+x8aNG1m3bh3/9E//xFve8paBY/Lz8/n2t79NTU0NNpuNrVu38swzz6D3/0H2zDPP8JWvfIU/+ZM/ob29nfLycnbu3ElZWdmkPdu3vvUtvvWtb3HkyBFWr17NU089RUlJCQCf/OQneeONN7jzzjvRNI0PfvCD/Nmf/RnPPvvswPkf/ehHCYfDfP/73+eee+6hpKSEO+64Y+D17373u3z+85/n/vvvZ+nSpaNG8773ve/xsY99jB07dlBSUsIXv/hFAoHApD3vSGimaZqjHRQIBCgoKMDv9+P1eqdjXYIwfxlLRGqi0atsu3+PPKrsV0I+Jb4KquCtfzMxofTc11TThjNX2brklih7GLtraAOJRd2eoULNGjt3+unBFPT6d6kU9FjelyOPpr+GIEwS4XCY2tpaVqxYgdvtnunlCPOckb7fxqLXJAIoCNOJYaix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",
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['tab:blue', 'tab:orange', 'tab:red']\n",
    "rfam_dict = {'RF00001': '5S_rRNA', 'RF00005': 'tRNA', 'RF00010': 'RNaseP_bact_a'}  # map the Rfam index to name\n",
    "\n",
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "print(sorted(list(set(labels))))\n",
    "\n",
    "for i, label in enumerate(sorted(list(set(labels)))):\n",
    "    # find the data points corresponding to the current label\n",
    "    print(i)\n",
    "    indices = [j for j, l in enumerate(labels) if l == label]\n",
    "    plt.scatter(embeddings[indices, 0], embeddings[indices, 1], color=colors[i], s=5, alpha=0.5, label=rfam_dict[label])\n",
    "\n",
    "\n",
    "plt.legend()\n",
    "plt.xticks([])\n",
    "plt.yticks([])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c83bb857",
   "metadata": {
    "id": "fxTn0apOBxn7",
    "papermill": {
     "duration": 0.022442,
     "end_time": "2024-03-23T07:06:02.967067",
     "exception": false,
     "start_time": "2024-03-23T07:06:02.944625",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Task 2. RNA Type Classification"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8fd2961c",
   "metadata": {
    "id": "S7QfOf5RCOd8",
    "papermill": {
     "duration": 0.021802,
     "end_time": "2024-03-23T07:06:03.011523",
     "exception": false,
     "start_time": "2024-03-23T07:06:02.989721",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "71d77ca2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:03.057387Z",
     "iopub.status.busy": "2024-03-23T07:06:03.056557Z",
     "iopub.status.idle": "2024-03-23T07:06:03.271257Z",
     "shell.execute_reply": "2024-03-23T07:06:03.270177Z"
    },
    "executionInfo": {
     "elapsed": 455,
     "status": "ok",
     "timestamp": 1711122070699,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "eUmgTnNtlg8z",
    "outputId": "352324ef-81c4-4ce5-bf46-896663f056d8",
    "papermill": {
     "duration": 0.240061,
     "end_time": "2024-03-23T07:06:03.273555",
     "exception": false,
     "start_time": "2024-03-23T07:06:03.033494",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1400 1400\n",
      "1400 1400\n",
      "number of classes: 28\n"
     ]
    }
   ],
   "source": [
    "fasta_path = Path(data_dir, 'format_rnacentral_active.100.sample-Max50.fasta')\n",
    "\n",
    "records = list(SeqIO.parse(fasta_path, 'fasta'))\n",
    "\n",
    "fasta_seqs = [str(record.seq) for record in records]\n",
    "fasta_seq_names = [record.id for record in records]\n",
    "\n",
    "print(len(fasta_seqs), len(fasta_seq_names))\n",
    "\n",
    "labels = [record.description.split()[1] for record in records]\n",
    "\n",
    "seqs = [(seq_name, seq) for seq_name, seq in zip(fasta_seq_names, fasta_seqs)]\n",
    "\n",
    "num_class = len(set(labels))\n",
    "\n",
    "print(len(seqs), len(labels))\n",
    "print(f'number of classes: {len(set(labels))}')\n",
    "\n",
    "label_to_num = {'miRNA': 0, 'snRNA': 1, 'other': 2, 'hammerhead_ribozyme': 3,\n",
    "                'telomerase_RNA': 4, 'antisense_RNA': 5, 'precursor_RNA': 6,\n",
    "                'tRNA': 7, 'snoRNA': 8, 'RNase_P_RNA': 9, 'pre_miRNA': 10,\n",
    "                'misc_RNA': 11, 'rRNA': 12, 'siRNA': 13, 'vault_RNA': 14,\n",
    "                'autocatalytically_spliced_intron': 15, 'guide_RNA': 16,\n",
    "                'Y_RNA': 17, 'scRNA': 18, 'sRNA': 19, 'scaRNA': 20,\n",
    "                'RNase_MRP_RNA': 21, 'tmRNA': 22, 'lncRNA': 23, 'ncRNA': 24,\n",
    "                'piRNA': 25, 'ribozyme': 26, 'SRP_RNA': 27}\n",
    "\n",
    "labels = [label_to_num[label] for label in labels]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74c953aa",
   "metadata": {
    "id": "Ja-VeY3PDMyr",
    "papermill": {
     "duration": 0.022205,
     "end_time": "2024-03-23T07:06:03.318837",
     "exception": false,
     "start_time": "2024-03-23T07:06:03.296632",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Retrieve RNA-FM embeddings"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "537cff3e",
   "metadata": {
    "id": "QKq77EHDgEWk",
    "papermill": {
     "duration": 0.021637,
     "end_time": "2024-03-23T07:06:03.362555",
     "exception": false,
     "start_time": "2024-03-23T07:06:03.340918",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "You don't need to download it again if you have already done so for the previous task."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "aa6c69e3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:03.408338Z",
     "iopub.status.busy": "2024-03-23T07:06:03.408004Z",
     "iopub.status.idle": "2024-03-23T07:06:03.412261Z",
     "shell.execute_reply": "2024-03-23T07:06:03.411404Z"
    },
    "executionInfo": {
     "elapsed": 19919,
     "status": "ok",
     "timestamp": 1711116788525,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "B8jfdGVsgECP",
    "outputId": "54d10f95-bf21-462d-ecf9-04322d1a71c8",
    "papermill": {
     "duration": 0.029971,
     "end_time": "2024-03-23T07:06:03.414182",
     "exception": false,
     "start_time": "2024-03-23T07:06:03.384211",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# !gdown 1zflX5hHTxuwqcZm6A1npq7ubP8m7LdNX  # for Colab only"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "39ccb022",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:03.459414Z",
     "iopub.status.busy": "2024-03-23T07:06:03.459162Z",
     "iopub.status.idle": "2024-03-23T07:06:05.437770Z",
     "shell.execute_reply": "2024-03-23T07:06:05.436832Z"
    },
    "executionInfo": {
     "elapsed": 2431,
     "status": "ok",
     "timestamp": 1711122078810,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "U6gcN7010BUD",
    "outputId": "1dac9979-cc8c-4bfa-91e5-c11f6381a946",
    "papermill": {
     "duration": 2.003691,
     "end_time": "2024-03-23T07:06:05.439807",
     "exception": false,
     "start_time": "2024-03-23T07:06:03.436116",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BioBertModel(\n",
       "  (embed_tokens): Embedding(25, 640, padding_idx=1)\n",
       "  (layers): ModuleList(\n",
       "    (0-11): 12 x TransformerLayer(\n",
       "      (self_attn): MultiheadAttention(\n",
       "        (k_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "        (v_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "        (q_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "        (out_proj): Linear(in_features=640, out_features=640, bias=True)\n",
       "      )\n",
       "      (self_attn_layer_norm): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "      (fc1): Linear(in_features=640, out_features=5120, bias=True)\n",
       "      (fc2): Linear(in_features=5120, out_features=640, bias=True)\n",
       "      (final_layer_norm): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "    )\n",
       "  )\n",
       "  (contact_head): ContactPredictionHead(\n",
       "    (regression): Linear(in_features=240, out_features=1, bias=True)\n",
       "    (activation): Sigmoid()\n",
       "  )\n",
       "  (embed_positions): LearnedPositionalEmbedding(1026, 640, padding_idx=1)\n",
       "  (emb_layer_norm_before): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "  (emb_layer_norm_after): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "  (lm_head): RobertaLMHead(\n",
       "    (dense): Linear(in_features=640, out_features=640, bias=True)\n",
       "    (layer_norm): LayerNorm((640,), eps=1e-05, elementwise_affine=True)\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load RNA-FM model\n",
    "fm_model, alphabet = fm.pretrained.rna_fm_t12(Path(data_dir, 'RNA-FM_pretrained.pth'))\n",
    "batch_converter = alphabet.get_batch_converter()\n",
    "\n",
    "fm_model.to(device)\n",
    "\n",
    "fm_model.eval()  # disables dropout for deterministic results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "51e9ab8d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:05.486627Z",
     "iopub.status.busy": "2024-03-23T07:06:05.486340Z",
     "iopub.status.idle": "2024-03-23T07:06:39.602557Z",
     "shell.execute_reply": "2024-03-23T07:06:39.601604Z"
    },
    "executionInfo": {
     "elapsed": 50541,
     "status": "ok",
     "timestamp": 1711122131982,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "QrusK81_BxDd",
    "outputId": "4817a316-2690-4b59-b173-443c09279ebd",
    "papermill": {
     "duration": 34.142179,
     "end_time": "2024-03-23T07:06:39.605052",
     "exception": false,
     "start_time": "2024-03-23T07:06:05.462873",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "042f1bc5960742c6882b8aa06195878b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/28 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1400, 1024, 640)\n"
     ]
    }
   ],
   "source": [
    "chunk_size = 50\n",
    "\n",
    "# pre-allocate the space to save memory\n",
    "token_embeddings = np.zeros((len(labels), 1024, 640))\n",
    "\n",
    "# divide all the sequences into chunks for processing due to the GPU memory limit\n",
    "for i in tqdm(range(0, len(seqs), chunk_size)):\n",
    "    data = seqs[i:i+chunk_size]\n",
    "\n",
    "    batch_labels, batch_strs, batch_tokens = batch_converter(data)\n",
    "\n",
    "    # use GPU\n",
    "    with torch.no_grad():\n",
    "        results = fm_model(batch_tokens.to(device), repr_layers=[12])\n",
    "\n",
    "    emb = results[\"representations\"][12].cpu().numpy()\n",
    "\n",
    "    token_embeddings[i:i+chunk_size, :emb.shape[1], :] = emb\n",
    "\n",
    "\n",
    "print(token_embeddings.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a2cc363",
   "metadata": {
    "id": "A2UR4iUSDg52",
    "papermill": {
     "duration": 0.021857,
     "end_time": "2024-03-23T07:06:39.649854",
     "exception": false,
     "start_time": "2024-03-23T07:06:39.627997",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Construct the dataset and classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "7e83cf53",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:39.694966Z",
     "iopub.status.busy": "2024-03-23T07:06:39.694672Z",
     "iopub.status.idle": "2024-03-23T07:06:39.700399Z",
     "shell.execute_reply": "2024-03-23T07:06:39.699528Z"
    },
    "executionInfo": {
     "elapsed": 455,
     "status": "ok",
     "timestamp": 1711122135296,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "hPk5lxOEDjc6",
    "papermill": {
     "duration": 0.030499,
     "end_time": "2024-03-23T07:06:39.702322",
     "exception": false,
     "start_time": "2024-03-23T07:06:39.671823",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "class RNATypeDataset(Dataset):\n",
    "    def __init__(self, embeddings, labels):\n",
    "        self.embeddings = embeddings\n",
    "        self.labels = labels\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.labels)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        # use the mean of the RNA-FM embedding along the sequence dimension\n",
    "        # so that all the embeddings are converted from (L, 640) -> (640,)\n",
    "        return np.mean(self.embeddings[idx], axis=0), self.labels[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "0325ff6c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:39.748225Z",
     "iopub.status.busy": "2024-03-23T07:06:39.747540Z",
     "iopub.status.idle": "2024-03-23T07:06:39.752496Z",
     "shell.execute_reply": "2024-03-23T07:06:39.751722Z"
    },
    "executionInfo": {
     "elapsed": 2,
     "status": "ok",
     "timestamp": 1711122137261,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "qkhcOcS2BxGm",
    "papermill": {
     "duration": 0.029593,
     "end_time": "2024-03-23T07:06:39.754288",
     "exception": false,
     "start_time": "2024-03-23T07:06:39.724695",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "class RNATypeClassifier(nn.Module):\n",
    "    def __init__(self, num_class):\n",
    "        super().__init__()\n",
    "        self.fc = nn.Linear(640, num_class)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.fc(x)\n",
    "\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "323bf481",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:39.799691Z",
     "iopub.status.busy": "2024-03-23T07:06:39.799440Z",
     "iopub.status.idle": "2024-03-23T07:06:44.805624Z",
     "shell.execute_reply": "2024-03-23T07:06:44.804719Z"
    },
    "executionInfo": {
     "elapsed": 5713,
     "status": "ok",
     "timestamp": 1711122209237,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "5i6-EYmwDfI2",
    "outputId": "eba5da81-dcac-45d1-864d-80a46aecc2f5",
    "papermill": {
     "duration": 5.031595,
     "end_time": "2024-03-23T07:06:44.808037",
     "exception": false,
     "start_time": "2024-03-23T07:06:39.776442",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(896, 1024, 640) (224, 1024, 640) (280, 1024, 640)\n"
     ]
    }
   ],
   "source": [
    "# each class have 50 samples, use 30 for train, 10 for val, and 10 for test (achieved by using stratify)\n",
    "x_train_val, x_test, y_train_val, y_test = train_test_split(token_embeddings, labels,\n",
    "                                                            test_size=0.2, random_state=42, stratify=labels)\n",
    "\n",
    "x_train, x_val, y_train, y_val = train_test_split(x_train_val, y_train_val,\n",
    "                                                  test_size=0.2, random_state=42, stratify=y_train_val)\n",
    "\n",
    "print(x_train.shape, x_val.shape, x_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "91295eb5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:44.854443Z",
     "iopub.status.busy": "2024-03-23T07:06:44.854145Z",
     "iopub.status.idle": "2024-03-23T07:06:44.863135Z",
     "shell.execute_reply": "2024-03-23T07:06:44.861957Z"
    },
    "executionInfo": {
     "elapsed": 613,
     "status": "ok",
     "timestamp": 1711122219859,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "kvpLRx_cGjtD",
    "outputId": "d38bc565-59bf-489a-ae79-7d5413d26467",
    "papermill": {
     "duration": 0.034335,
     "end_time": "2024-03-23T07:06:44.865212",
     "exception": false,
     "start_time": "2024-03-23T07:06:44.830877",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{0: 0.03571428571428571, 1: 0.03571428571428571, 2: 0.03571428571428571, 3: 0.03571428571428571, 4: 0.03571428571428571, 5: 0.03571428571428571, 6: 0.03571428571428571, 7: 0.03571428571428571, 8: 0.03571428571428571, 9: 0.03571428571428571, 10: 0.03571428571428571, 11: 0.03571428571428571, 12: 0.03571428571428571, 13: 0.03571428571428571, 14: 0.03571428571428571, 15: 0.03571428571428571, 16: 0.03571428571428571, 17: 0.03571428571428571, 18: 0.03571428571428571, 19: 0.03571428571428571, 20: 0.03571428571428571, 21: 0.03571428571428571, 22: 0.03571428571428571, 23: 0.03571428571428571, 24: 0.03571428571428571, 25: 0.03571428571428571, 26: 0.03571428571428571, 27: 0.03571428571428571}\n",
      "{0: 0.03571428571428571, 1: 0.03571428571428571, 2: 0.03571428571428571, 3: 0.03571428571428571, 4: 0.03571428571428571, 5: 0.03571428571428571, 6: 0.03571428571428571, 7: 0.03571428571428571, 8: 0.03571428571428571, 9: 0.03571428571428571, 10: 0.03571428571428571, 11: 0.03571428571428571, 12: 0.03571428571428571, 13: 0.03571428571428571, 14: 0.03571428571428571, 15: 0.03571428571428571, 16: 0.03571428571428571, 17: 0.03571428571428571, 18: 0.03571428571428571, 19: 0.03571428571428571, 20: 0.03571428571428571, 21: 0.03571428571428571, 22: 0.03571428571428571, 23: 0.03571428571428571, 24: 0.03571428571428571, 25: 0.03571428571428571, 26: 0.03571428571428571, 27: 0.03571428571428571}\n",
      "{0: 0.03571428571428571, 1: 0.03571428571428571, 2: 0.03571428571428571, 3: 0.03571428571428571, 4: 0.03571428571428571, 5: 0.03571428571428571, 6: 0.03571428571428571, 7: 0.03571428571428571, 8: 0.03571428571428571, 9: 0.03571428571428571, 10: 0.03571428571428571, 11: 0.03571428571428571, 12: 0.03571428571428571, 13: 0.03571428571428571, 14: 0.03571428571428571, 15: 0.03571428571428571, 16: 0.03571428571428571, 17: 0.03571428571428571, 18: 0.03571428571428571, 19: 0.03571428571428571, 20: 0.03571428571428571, 21: 0.03571428571428571, 22: 0.03571428571428571, 23: 0.03571428571428571, 24: 0.03571428571428571, 25: 0.03571428571428571, 26: 0.03571428571428571, 27: 0.03571428571428571}\n"
     ]
    }
   ],
   "source": [
    "def class_distribution(labels):\n",
    "    classes, counts = np.unique(labels, return_counts=True)\n",
    "    distribution = counts / counts.sum()\n",
    "    return dict(zip(classes, distribution))\n",
    "\n",
    "\n",
    "train_dist = class_distribution(y_train)\n",
    "val_dist = class_distribution(y_val)\n",
    "test_dist = class_distribution(y_test)\n",
    "\n",
    "print(train_dist)\n",
    "print(val_dist)\n",
    "print(test_dist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "8b767e6c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:44.911979Z",
     "iopub.status.busy": "2024-03-23T07:06:44.911392Z",
     "iopub.status.idle": "2024-03-23T07:06:44.915346Z",
     "shell.execute_reply": "2024-03-23T07:06:44.914507Z"
    },
    "executionInfo": {
     "elapsed": 454,
     "status": "ok",
     "timestamp": 1711122277559,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "T9T2nHK6IWR0",
    "papermill": {
     "duration": 0.028867,
     "end_time": "2024-03-23T07:06:44.917075",
     "exception": false,
     "start_time": "2024-03-23T07:06:44.888208",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# hyper-parameters\n",
    "\n",
    "batch_size = 8\n",
    "lr = 1e-3\n",
    "epochs = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "8247d68b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:44.962858Z",
     "iopub.status.busy": "2024-03-23T07:06:44.962294Z",
     "iopub.status.idle": "2024-03-23T07:06:44.967692Z",
     "shell.execute_reply": "2024-03-23T07:06:44.966870Z"
    },
    "executionInfo": {
     "elapsed": 779,
     "status": "ok",
     "timestamp": 1711122803035,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "aldfo7Y4HJnv",
    "papermill": {
     "duration": 0.030284,
     "end_time": "2024-03-23T07:06:44.969492",
     "exception": false,
     "start_time": "2024-03-23T07:06:44.939208",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "train_dataset = RNATypeDataset(x_train, y_train)\n",
    "val_dataset = RNATypeDataset(x_val, y_val)\n",
    "test_dataset = RNATypeDataset(x_test, y_test)\n",
    "\n",
    "train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
    "val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)\n",
    "test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "55bb33f0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:45.014941Z",
     "iopub.status.busy": "2024-03-23T07:06:45.014704Z",
     "iopub.status.idle": "2024-03-23T07:06:45.021336Z",
     "shell.execute_reply": "2024-03-23T07:06:45.020315Z"
    },
    "executionInfo": {
     "elapsed": 1,
     "status": "ok",
     "timestamp": 1711122803665,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "hSIvXw7SIbET",
    "outputId": "8bd4eaf7-1848-4af9-c279-63820845afda",
    "papermill": {
     "duration": 0.031499,
     "end_time": "2024-03-23T07:06:45.023237",
     "exception": false,
     "start_time": "2024-03-23T07:06:44.991738",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RNATypeClassifier(\n",
      "  (fc): Linear(in_features=640, out_features=28, bias=True)\n",
      ")\n"
     ]
    }
   ],
   "source": [
    "model = RNATypeClassifier(num_class).to(device)\n",
    "print(model)\n",
    "\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=lr)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e2823df",
   "metadata": {
    "id": "ypjZGoZYH_zR",
    "papermill": {
     "duration": 0.022371,
     "end_time": "2024-03-23T07:06:45.068278",
     "exception": false,
     "start_time": "2024-03-23T07:06:45.045907",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Train the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "1b3976d5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:06:45.114054Z",
     "iopub.status.busy": "2024-03-23T07:06:45.113808Z",
     "iopub.status.idle": "2024-03-23T07:07:58.990132Z",
     "shell.execute_reply": "2024-03-23T07:07:58.989229Z"
    },
    "executionInfo": {
     "elapsed": 80989,
     "status": "ok",
     "timestamp": 1711122937908,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "S1D7_PbmHntP",
    "outputId": "64f71318-c1d5-4c70-f5ee-9ae6feaf84ee",
    "papermill": {
     "duration": 73.90221,
     "end_time": "2024-03-23T07:07:58.992759",
     "exception": false,
     "start_time": "2024-03-23T07:06:45.090549",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f4421aaaa5f14dbf9cc8c62d599e1fbe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 1/100: train loss=3.044983, train acc=0.279018, val loss=2.806200, val acc=0.424107\n",
      "epoch 21/100: train loss=1.742194, train acc=0.808036, val loss=1.734867, val acc=0.754464\n",
      "epoch 41/100: train loss=1.331669, train acc=0.858259, val loss=1.417151, val acc=0.776786\n",
      "epoch 61/100: train loss=1.100573, train acc=0.895089, val loss=1.247724, val acc=0.803571\n",
      "epoch 81/100: train loss=0.946295, train acc=0.919643, val loss=1.142060, val acc=0.825893\n"
     ]
    }
   ],
   "source": [
    "max_val_acc = -1\n",
    "best_epoch = -1\n",
    "\n",
    "train_loss_history = []\n",
    "val_loss_history = []\n",
    "\n",
    "train_acc_history = []\n",
    "val_acc_history = []\n",
    "\n",
    "for epoch in tqdm(range(epochs)):\n",
    "\n",
    "    # train the model\n",
    "    train_losses = []\n",
    "    train_preds = []\n",
    "    train_targets = []\n",
    "\n",
    "    model.train()\n",
    "\n",
    "    for batch in train_loader:\n",
    "        x, y = batch\n",
    "        x, y = x.to(device).float(), y.to(device).long()\n",
    "\n",
    "        # no need to apply the softmax function since it has been included in the loss function\n",
    "        y_pred = model(x)\n",
    "\n",
    "        # y_pred: (B, C) with class probabilities, y shape: (B,) with class indices\n",
    "        loss = criterion(y_pred, y)\n",
    "\n",
    "        train_losses.append(loss.item())\n",
    "        train_preds.append(torch.max(y_pred.detach(),1)[1])\n",
    "        train_targets.append(y)\n",
    "\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    # validate the model\n",
    "    val_losses = []\n",
    "    val_preds = []\n",
    "    val_targets = []\n",
    "\n",
    "    model.eval()\n",
    "\n",
    "    for batch in val_loader:\n",
    "        x, y = batch\n",
    "        x, y = x.to(device).float(), y.to(device).long()\n",
    "\n",
    "        y_pred = model(x)\n",
    "\n",
    "        # y_pred: (B, C) with class probabilities, y shape: (B,) with class indices\n",
    "        loss = criterion(y_pred, y)\n",
    "\n",
    "        val_losses.append(loss.item())\n",
    "        val_preds.append(torch.max(y_pred.detach(),1)[1])\n",
    "        val_targets.append(y)\n",
    "\n",
    "    # calculate the accuracy\n",
    "    train_preds = torch.cat(train_preds, dim=0)\n",
    "    train_targets = torch.cat(train_targets, dim=0)\n",
    "    train_acc = (train_preds == train_targets).float().mean().cpu()\n",
    "\n",
    "    val_preds = torch.cat(val_preds, dim=0)\n",
    "    val_targets = torch.cat(val_targets, dim=0)\n",
    "    val_acc = (val_preds == val_targets).float().mean().cpu()\n",
    "\n",
    "    train_acc_history.append(train_acc)\n",
    "    val_acc_history.append(val_acc)\n",
    "\n",
    "    # save the model checkpoint for the best validation accuracy\n",
    "    if val_acc > max_val_acc:\n",
    "        torch.save({'model_state_dict': model.state_dict()}, 'rna_type_checkpoint.pt')\n",
    "        best_epoch = epoch\n",
    "        max_val_acc = val_acc\n",
    "\n",
    "    # show intermediate steps\n",
    "    if epoch % 20 == 1:\n",
    "        tqdm.write(f'epoch {epoch}/{epochs}: train loss={np.mean(train_loss_history):.6f}, '\n",
    "                   f'train acc={train_acc:.6f}, '\n",
    "                   f'val loss={np.mean(val_loss_history):.6f}, '\n",
    "                   f'val acc={val_acc:.6f}')\n",
    "\n",
    "    train_loss_history.append(np.mean(train_losses))\n",
    "    val_loss_history.append(np.mean(val_losses))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "272c2035",
   "metadata": {
    "id": "gsJ7UkZU2mra",
    "papermill": {
     "duration": 0.022939,
     "end_time": "2024-03-23T07:07:59.039177",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.016238",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Visualize training results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "3377ba42",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:07:59.086511Z",
     "iopub.status.busy": "2024-03-23T07:07:59.085883Z",
     "iopub.status.idle": "2024-03-23T07:07:59.324597Z",
     "shell.execute_reply": "2024-03-23T07:07:59.323741Z"
    },
    "executionInfo": {
     "elapsed": 938,
     "status": "ok",
     "timestamp": 1711122961290,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "mjJckdmZiGnz",
    "outputId": "2eedfd53-18d0-4fe1-b3bf-148773fc96cc",
    "papermill": {
     "duration": 0.26446,
     "end_time": "2024-03-23T07:07:59.326669",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.062209",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAIjCAYAAAAQgZNYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB9o0lEQVR4nO3dd3hUZd7G8e/MJJn0TgqQUEPvVVBEFhRRUbCuoqhreVVQWVdXcde6q7i6lrWsZXftIlawoiIKgtKb9E4SIIX03mbO+8eBCZEOSU4mc3+ufa45OXNm5jccF24enmIzDMNARERERMQL2a0uQERERETkZCnMioiIiIjXUpgVEREREa+lMCsiIiIiXkthVkRERES8lsKsiIiIiHgthVkRERER8VoKsyIiIiLitRRmRURERMRrKcyKiDRjNpuNhx9+2OoyREQajMKsiPi8N998E5vNxvLly60u5agefvhhbDYbOTk5h32+bdu2XHDBBaf8OdOnT+e555475fcREWkMflYXICIiDae8vBw/vxP7rX769OmsW7eOKVOmNExRIiL1SGFWRKQZCwwMtLoEAGpqanC73QQEBFhdiog0MxpmICJynFatWsWYMWMIDw8nNDSUkSNHsnjx4jrXVFdX88gjj5CSkkJgYCAxMTGcccYZzJkzx3NNZmYm119/Pa1bt8bpdJKYmMhFF13Erl276r3m346ZLS4uZsqUKbRt2xan00lcXBxnn302K1euBOCss87iq6++IjU1FZvNhs1mo23btp7XZ2dnc8MNNxAfH09gYCC9e/fmrbfeqvOZu3btwmaz8c9//pPnnnuODh064HQ6Wbp0KSEhIdx5552H1Ll7924cDgfTpk2r918DEWne1DMrInIc1q9fz7BhwwgPD+fPf/4z/v7+vPrqq5x11lnMnz+fwYMHA+a41mnTpnHjjTcyaNAgioqKWL58OStXruTss88G4JJLLmH9+vXcfvvttG3bluzsbObMmUNaWlqd4HgkeXl5hz3vdruP+dpbbrmFjz/+mMmTJ9OtWzdyc3NZuHAhGzdupF+/fvzlL3+hsLCQ3bt38+yzzwIQGhoKmEMWzjrrLLZt28bkyZNp164dH330Eddddx0FBQWHhNQ33niDiooKbr75ZpxOJ8nJyYwfP54PPviAZ555BofD4bn2/fffxzAMJkyYcMzvICJShyEi4uPeeOMNAzCWLVt2xGvGjRtnBAQEGNu3b/ec27t3rxEWFmaceeaZnnO9e/c2zj///CO+T35+vgEYTz311AnX+dBDDxnAUdtvPxswHnroIc/PERERxqRJk476Oeeff77Rpk2bQ84/99xzBmC8++67nnNVVVXGkCFDjNDQUKOoqMgwDMPYuXOnARjh4eFGdnZ2nff49ttvDcCYPXt2nfO9evUyhg8ffhy/CiIidWmYgYjIMbhcLr777jvGjRtH+/btPecTExO56qqrWLhwIUVFRQBERkayfv16tm7detj3CgoKIiAggHnz5pGfn39S9XzyySfMmTPnkBYfH3/M10ZGRrJkyRL27t17wp/79ddfk5CQwJVXXuk55+/vzx133EFJSQnz58+vc/0ll1xCixYt6pwbNWoULVu25L333vOcW7duHb/++itXX331CdckIqIwKyJyDPv27aOsrIzOnTsf8lzXrl1xu92kp6cD8Oijj1JQUECnTp3o2bMn99xzD7/++qvneqfTyT/+8Q9mz55NfHw8Z555Jk8++SSZmZnHXc+ZZ57JqFGjDmnHM9nrySefZN26dSQlJTFo0CAefvhhduzYcVyfm5qaSkpKCnZ73T86unbt6nn+YO3atTvkPex2OxMmTGDWrFmUlZUB8N577xEYGMhll112XHWIiBxMYVZEpB6deeaZbN++nddff50ePXrw3//+l379+vHf//7Xc82UKVPYsmUL06ZNIzAwkAceeICuXbuyatWqBq/v8ssvZ8eOHbzwwgu0bNmSp556iu7duzN79ux6/6ygoKDDnp84cSIlJSXMmjULwzCYPn06F1xwAREREfVeg4g0fwqzIiLH0KJFC4KDg9m8efMhz23atAm73U5SUpLnXHR0NNdffz3vv/8+6enp9OrV65BduDp06MCf/vQnvvvuO9atW0dVVRVPP/10Q38VwBwecdtttzFr1ix27txJTEwMjz32mOd5m8122Ne1adOGrVu3HjLRbNOmTZ7nj0ePHj3o27cv7733HgsWLCAtLY1rrrnmJL+NiPg6hVkRkWNwOBycc845fPbZZ3WWz8rKymL69OmcccYZhIeHA5Cbm1vntaGhoXTs2JHKykoAysrKqKioqHNNhw4dCAsL81zTUFwuF4WFhXXOxcXF0bJlyzqfHRIScsh1AOeddx6ZmZl88MEHnnM1NTW88MILhIaGMnz48OOu5ZprruG7777jueeeIyYmhjFjxpzENxIR0dJcIiIer7/+Ot98880h5++8807+/ve/M2fOHM444wxuu+02/Pz8ePXVV6msrOTJJ5/0XNutWzfOOuss+vfvT3R0NMuXL/cshQWwZcsWRo4cyeWXX063bt3w8/Nj5syZZGVl8fvf/75Bv19xcTGtW7fm0ksvpXfv3oSGhvL999+zbNmyOr3C/fv354MPPuCuu+5i4MCBhIaGMnbsWG6++WZeffVVrrvuOlasWEHbtm35+OOP+fnnn3nuuecICws77lquuuoq/vznPzNz5kxuvfVW/P39G+Iri4gvsHo5BRERqx1YmutILT093TAMw1i5cqUxevRoIzQ01AgODjZGjBhh/PLLL3Xe6+9//7sxaNAgIzIy0ggKCjK6dOliPPbYY0ZVVZVhGIaRk5NjTJo0yejSpYsREhJiREREGIMHDzY+/PDDY9Z5YGmuffv2Hfb5Nm3aHHVprsrKSuOee+4xevfubYSFhRkhISFG7969jX//+991XlNSUmJcddVVRmRkpAHUWaYrKyvLuP76643Y2FgjICDA6Nmzp/HGG2/Uef2BpbmOtfzYeeedZwCH/BqKiJwIm2EYhjUxWkREfNn48eNZu3Yt27Zts7oUEfFiGjMrIiKNLiMjg6+++koTv0TklGnMrIiINJqdO3fy888/89///hd/f3/+7//+z+qSRMTLqWdWREQazfz587nmmmvYuXMnb731FgkJCVaXJCJeTmNmRURERMRrqWdWRERERLyWwqyIiIiIeC2fmwDmdrvZu3cvYWFhR9yyUURERESsYxgGxcXFtGzZErv96H2vPhdm9+7dW2cPdRERERFpmtLT02nduvVRr/G5MHtgu8X09HTPXuoiIiIiXq2mBj7/3Dy+8ELw8+6IV1RURFJS0nFtk+3d3/QkHBhaEB4erjArIiIizUN5Obz4onl8xRUQFGRtPfXkeIaEagKYiIiIiHgthVkRERER8VoKsyIiIiLitRRmRURERMRrKcyKiIiIiNdSmBURERERr+VzS3OJiIiINDsBAfDcc7XHPkRhVkRERMTbORxwxhlWV2EJDTMQEREREa+lnlkRERERb1dTA7Nnm8djxnj9drYnwne+qYiIiEhzVV0NjzxiHo8a5VNhVsMMRERERMRrKcyKiIiIiNdSmBURERERr6UwKyIiIiJeS2FWRERERLyW70x1s8jWrGK2ZJWQEh9Kp/gwq8sRERERaVYUZhvYfxbs4MPlu7n7nE4KsyIiItIwAgLgiSdqj32IwmwDSwgPBCCjsMLiSkRERKTZcjjM9WV9kMbMNrCEiCAAsooUZkVERETqm3pmG1hChBNQz6yIiIg0IJcLfvzRPB4xwuyp9RGW9sy+/PLL9OrVi/DwcMLDwxkyZAizD+wrfAQfffQRXbp0ITAwkJ49e/L11183UrUnJyFcPbMiIiLSwKqq4L77zFZVZXU1jcrSMNu6dWueeOIJVqxYwfLly/nd737HRRddxPr16w97/S+//MKVV17JDTfcwKpVqxg3bhzjxo1j3bp1jVz58UuIMMfM5pRUUVnjsrgaERERkebFZhiGYXURB4uOjuapp57ihhtuOOS5K664gtLSUr788kvPudNOO40+ffrwyiuvHNf7FxUVERERQWFhIeHh4fVW95EYhkHnB76hqsbNgj+PICk6uME/U0RERHxMeTkMG2YeL1gAQUHW1nOKTiSvNZkJYC6XixkzZlBaWsqQIUMOe82iRYsY9ZuZeqNHj2bRokVHfN/KykqKiorqtMZks9k8KxpkaqiBiIiISL2yPMyuXbuW0NBQnE4nt9xyCzNnzqRbt26HvTYzM5P4+Pg65+Lj48nMzDzi+0+bNo2IiAhPS0pKqtf6j8eBoQaaBCYiIiJSvywPs507d2b16tUsWbKEW2+9lWuvvZYNGzbU2/tPnTqVwsJCT0tPT6+39z5eB3pmsxRmRUREROqV5UtzBQQE0LFjRwD69+/PsmXL+Ne//sWrr756yLUJCQlkZWXVOZeVlUVCQsIR39/pdOJ0Ouu36BOUqJ5ZERERkQZhec/sb7ndbiorKw/73JAhQ5g7d26dc3PmzDniGNumIv5Az6zGzIqIiEhD8PeHhx4ym7+/1dU0Kkt7ZqdOncqYMWNITk6muLiY6dOnM2/ePL799lsAJk6cSKtWrZg2bRoAd955J8OHD+fpp5/m/PPPZ8aMGSxfvpzXXnvNyq9xTLU9s+UWVyIiIiLNkp8fjB1rdRWWsDTMZmdnM3HiRDIyMoiIiKBXr158++23nH322QCkpaVht9d2Hg8dOpTp06fz17/+lfvvv5+UlBRmzZpFjx49rPoKx+XABLCsosP3OIuIiIjIyWly68w2tMZeZxbMHtkh037Az25jy9/HYLfbGuVzRURExEe4XHBgqdIhQ7x+O9sTyWuWTwDzBS1CndhtUOM2yCmtJC4s0OqSREREpDmpqoIpU8zjZrBpwolochPAmiM/h50WYeaKCpla0UBERESk3ijMNpKECPNvSAqzIiIiIvVHYbaRJITv75nV8lwiIiIi9UZhtpEkqmdWREREpN4pzDaSAxsnKMyKiIiI1B+F2UaiLW1FRERE6p+W5mok2tJWREREGoy/P/z5z7XHPkRhtpEc3DNrGAY2mzZOEBERkXri5weXX251FZbQMINGcmBL2/JqF0UVNRZXIyIiItI8KMw2kkB/B5HBZre/JoGJiIhIvXK7YcUKs7ndVlfTqBRmG1HCgRUNNG5WRERE6lNlJfzf/5mtstLqahqVwmwjOjDUILOw3OJKRERERJoHhdlGlOgJs771NyYRERGRhqIw24g8GycUqWdWREREpD4ozDai2p5ZjZkVERERqQ8Ks43oQM+sdgETERERqR8Ks40oMSII0GoGIiIiIvVFO4A1ogNLcxWUVVNR7SLQ32FxRSIiItIs+PnBHXfUHvsQ3/q2FgsP8iPI30F5tYvMwgraxoZYXZKIiIg0B/7+MHGi1VVYQsMMGpHNZqtda1ZDDUREREROmcJsQ6sqhcx1UJQBHLQLmCaBiYiISH1xu2HDBrNpO1upV5/fAa+cDms/AlDPrIiIiNS/ykpzmMHEidrOVupZdHvzMW87cPCWtgqzIiIiIqdKYbahecLsDkDDDERERETqk8JsQ/OE2Z1Abc9shoYZiIiIiJwyhdmGdiDMFu6G6gpPz2yWemZFRERETpnCbEMLiQVnOGBAQSqJ+3tms4srqHH51mxDERERkfqmMNvQbDaIbmce5+0gJtSJn92G24CckipraxMRERHxctoBrDFEt4eMNZC3A4fdRlyYk72FFWQUlnvG0IqIiIicND8/uPnm2mMf4lvf1ioHxs3m1i7PtbewQisaiIiISP3w968Nsz5Gwwwaw2+X59LGCSIiIiL1Qj2zjeGQtWaDAK01KyIiIvXE7YZdu8zjtm3B7jv9lQqzjcGzPFc61FSREOEE1DMrIiIi9aSyEi6/3DxesACCgqytpxH5Tmy3Umg8+IeA4YaCNBIizP/AMtQzKyIiInJKFGYbg81WZ6iBZ+ME9cyKiIiInBKF2cZy0FqzBzZOyCiswDAMC4sSERER8W4Ks43F0zO7nbhwc8xsVY2bgrJqC4sSERER8W4Ks43loGEGTj8HMSEBAOwpKLewKBERERHvpjDbWH6zPFebmGAAduaUWlWRiIiIiNfT0lyNJaaD+ViQBq5qOsaFsjKtgG3ZJdbWJSIiIt7Pzw+uuab22If41re1UmgC+AVBTTkUptMxLhSA7fsUZkVEROQU+fvDnXdaXYUlNMygsdjtdVY06NDCDLPqmRURERE5eQqzjckzbnanp2d2R04pLreW5xIREZFT4HbD3r1mc7utrqZRKcw2pgM9s7nbaR0VTICfnaoaN3vytaKBiIiInILKSrjwQrNVVlpdTaNSmG1MB61o4LDbaB8bAsC2fcUWFiUiIiLivRRmG9NvlufqcGASWLaW5xIRERE5GQqzjSl6//Jc+bvA7dIkMBEREZFTpDDbmMJbgcMJ7moo3O2ZBLZNy3OJiIiInBSF2cZkt0NUW/M4bwcdD+qZNQytaCAiIiJyohRmG9tB42bbtwjBZoPC8mpyS6usrUtERETEC2kHsMZ2UJgN9HfQOiqI9LxytmeXEBvqtLY2ERER8U4OB1x2We2xD1GYbWwH7QIG0KFFKOl55WzbV8Lg9jEWFiYiIiJeKyAA7r3X6iosoWEGjS1m/4oG+8NsR61oICIiInLS1DPb2A7a0ha327OiwfZ9WmtWRERETpJhQEGBeRwZCTabldU0KoXZxhbeGuz+4KqE4r0HbZygnlkRERE5SRUVcPbZ5vGCBRAUZG09jUjDDBqbww+i2pjHBy3PtaegnNLKGgsLExEREfE+CrNWOGhFg6iQAKJDAgDYmaOhBiIiIiInQmHWCgfCbO52QJPARERERE6WwqwVDuqZBWrHzWpbWxEREZETojBrhegDy3PtBKBDixBAPbMiIiIiJ0ph1goHb5xgGJ7luRRmRURERE6MluayQmQy2BxQUw7FmXRoEQHArtxSalxu/Bz6O4aIiIicAIcDLrig9tiHKMxaweEPUW0hbzvs20SrdmcR5O+gvNpFWl4Z7fdPCBMRERE5LgEB8PDDVldhCXUBWiW+u/mYvQG73Ub7/eNmtROYiIiIyPFTmLVKfA/zMXMdAB20PJeIiIicLMOA8nKzGYbV1TQqhVmrHOiZzTLDrCaBiYiIyEmrqIBhw8xWUWF1NY3K0jA7bdo0Bg4cSFhYGHFxcYwbN47Nmzcf9TVvvvkmNputTgsMDGykiuvRgTC7bxO4ajxhVmvNioiIiBw/S8Ps/PnzmTRpEosXL2bOnDlUV1dzzjnnUFp69HGj4eHhZGRkeFpqamojVVyPIttAQBi4qiB3m2eYwfbsEgwf++cBERERkZNl6WoG33zzTZ2f33zzTeLi4lixYgVnnnnmEV9ns9lISEho6PIalt0O8d0gfQlkraNt1xTsNiiurGFfcSVx4V7Y2ywiIiLSyJrUmNnCwkIAoqOjj3pdSUkJbdq0ISkpiYsuuoj169cf8drKykqKiorqtCbjoHGzTj8HydHBgMbNioiIiByvJhNm3W43U6ZM4fTTT6dHjx5HvK5z5868/vrrfPbZZ7z77ru43W6GDh3K7t27D3v9tGnTiIiI8LSkpKSG+gonzhNmzTDumQSmcbMiIiIix6XJhNlJkyaxbt06ZsyYcdTrhgwZwsSJE+nTpw/Dhw/n008/pUWLFrz66quHvX7q1KkUFhZ6Wnp6ekOUf3Lie5qPB5bniqsdNysiIiIix9YkdgCbPHkyX375JT/99BOtW7c+odf6+/vTt29ftm3bdtjnnU4nTqezPsqsf3FdzcfivVCWV7vWrHpmRURE5EQ4HDByZO2xD7E0zBqGwe23387MmTOZN28e7dq1O+H3cLlcrF27lvPOO68BKmxggeHmqgYFqZC1no5x5vCKLVkKsyIiInICAgLgH/+wugpLWDrMYNKkSbz77rtMnz6dsLAwMjMzyczMpLy83HPNxIkTmTp1qufnRx99lO+++44dO3awcuVKrr76alJTU7nxxhut+AqnLmH/UIOs9XRJCMNug33FlWQV+daCxyIiIiInw9Iw+/LLL1NYWMhZZ51FYmKip33wwQeea9LS0sjIyPD8nJ+fz0033UTXrl0577zzKCoq4pdffqFbt25WfIVT55kEtpbgAD/PJLC1uwstLEpERETEO1g+zOBY5s2bV+fnZ599lmeffbaBKrLAb1Y06NEqgi1ZJazdU8iobvEWFiYiIiJeo7zc3MoWYMECCAqytp5G1GRWM/BZ8fuXIcveCG4XvVpFALBuj3pmRURERI5FYdZqUe3APxhqKiB3Oz1bm2H2V4VZERERkWNSmLWa3Q5x+8f7Zq2jW2KEJoGJiIiIHCeF2abgoHGzQQEOUuLCAPhVk8BEREREjkphtik4MG72oElgAGs11EBERETkqBRmm4KEA2HW3Na2V2tNAhMRERE5Hk1iO1ufd2DMbGE6lBd4emZ/3V2IYRjYbDYLixMREZEmz+GA00+vPfYhCrNNQVAkRCSZYTZ7A90SB2O3QU5JJVlFlSREBFpdoYiIiDRlAQHwr39ZXYUlNMygqTgwbjZzHUEBDjrFm5PANG5WRERE5MgUZpsKz4oG5rhZzySw3QUWFSQiIiLS9CnMNhW/2db2wCQw9cyKiIjIMZWXwxlnmK283OpqGpXGzDYVnm1tN4DbfdDyXEWaBCYiIiLHVuGbmy2pZ7apiOkAfoFQXQb5O+mWGI7DbiOnpJJM7QQmIiIiclgKs02F3QFxXc3jrHUE+jtIiQsFYK12AhMRERE5LIXZpuQ342Z7ttLmCSIiIiJHozDblBy0PBdAz/2TwH5VmBURERE5LIXZpsQTZtcCdXtmDcOwqioRERGRJkurGTQlib3BZofCNCjcQ9fEhP2TwKrIKKygZWSQ1RWKiIhIU2S3Q79+tcc+xLe+bVMXGA4JvczjtEV1J4FpqIGIiIgcidMJr71mNqfT6moalcJsU9NmqPmY+gtQu3mCJoGJiIiIHEphtqlJHmI+pi0CasfN/qrluUREREQOoTDb1Bzomc3eAGV59GwdCWgSmIiIiBxFeTmMGmU2H9vOVmG2qQmJhdhO5nHaYrokhOFnt5Fbak4CExERETmsggKz+RiF2abIM9TgF3MSWHwYoKEGIiIiIr+lMNsU/XYS2P5xs2v3FFhUkIiIiEjTpDDbFB0IsxlroKqUvsmRACzblW9dTSIiIiJNkMJsUxSZDOGtwV0Du5dxWvsYAFanFVBR7bK4OBEREZGmQ2G2qWqzf9xs6i+0iQkmITyQKpeblWnqnRURERE5QGG2qTpo3KzNZuO09tEALN6RZ2FRIiIi0iTZ7dCtm9l8bDtbP6sLkCNI3h9mdy+HmipOax/DrNV7Wbwj19q6REREpOlxOuHtt62uwhK+Fd29SYvOEBQNNeWQsZrBGjcrIiIicgiF2abKZqsz1KBtTDDx4U6NmxURERE5iMJsU+bZPGHR/nGzZu+sxs2KiIhIHRUVMHas2Sp8a8dQhdmmrE1tmMXtPijMatysiIiIHMQwICPDbIZhdTWNSmG2KUvoDf4hUFEI2Ru03qyIiIjIbyjMNmUOP0gaZB6nLdK4WREREZHfUJht6jyTwH7WuFkRERGR31CYbeoOTAJLXQSGoXGzIiIiIgdRmG3qWg8Auz+UZEL+To2bFRERETmIwmxT5x8ErfqZx6kaNysiIiKHYbNB+/Zms9msrqZRKcx6gwPjZnfO17hZEREROVRgIHz4odkCA62uplEpzHqDDiPNx23fa71ZERERkYMozHqD5NPAGQ5lubB3pcbNioiIiOynMOsNHP7QYYR5vPU7jZsVERGRuioq4PLLzabtbKVJSjnHfNzyrcbNioiISF2GATt2mE3b2UqT1PFs8zFjNRRnadysiIiICAqz3iMsHhL7mMfb5mjcrIiIiAgKs96l02jz8TfjZlekatysiIiI+CaFWW9yYNzs9h+xuWs4o2MLAOZtzrawKBERERHrKMx6k5b9IDgWKosgbTEjuphh9sfN+ywuTERERMQaCrPexG6HjqPM463fMSylBQ67jW3ZJaTnlVlbm4iIiFjHZoPERLNpO1tp0jrtH2qw9Tsigvzp3yYKgB811EBERMR3BQbCF1+YTdvZSpPW4Xdgc8C+TZCfyu+6xAHwwyaFWREREfE9CrPeJigKkgabx1u/Y0RnM8wu2p5LeZWW6BIRERHfojDrjVL2b6CwdQ6d4kNpFRlEZY2bRTtyrK1LRERErFFZCRMnmq2y0upqGpXCrDc6sN7szp+w1VRwVuf9qxps0qoGIiIiPsnthg0bzOZ2W11No1KY9UZx3SC8FdSUw66FdcbNGj62H7OIiIj4NoVZb2Sz1W6gsOVbhnSIIcDPzp6CcrZll1hbm4iIiEgjUpj1VgfC7NZvCfZ3MKR9DKAlukRERMS3KMx6q/bDwREABWmwbzMj9o+b1RJdIiIi4ksUZr1VQAi0G24er5/JiP3jZpfvyqeootrCwkREREQaj8KsN+t5mfm49iPaRAfTvkUINW6DhVu1RJeIiIjPiYw0m49RmPVmXc4DvyDI2w57V3k2UPhRQw1ERER8S1AQfP+92YKCrK6mUSnMejNnGHQeYx6v/cizRNePm/fhdmuJLhEREWn+FGa9Xa/Lzcd1nzAwOYKQAAc5JZWs31tkbV0iIiIijUBh1tt1GAlBUVCSRUD6Qs5IiQW0qoGIiIhPqayEm282m7azbTzTpk1j4MCBhIWFERcXx7hx49i8efMxX/fRRx/RpUsXAgMD6dmzJ19//XUjVNtE+QVAt3Hm8dqPPeNmf9B6syIiIr7D7YaVK82m7Wwbz/z585k0aRKLFy9mzpw5VFdXc84551BaWnrE1/zyyy9ceeWV3HDDDaxatYpx48Yxbtw41q1b14iVNzEHVjXY+DkjOoZjs8Ga9AL2FpRbW5eIiIhIA7MZhtFkZgrt27ePuLg45s+fz5lnnnnYa6644gpKS0v58ssvPedOO+00+vTpwyuvvHLMzygqKiIiIoLCwkLCw8PrrXZLud3wXE8o2g2Xv80VC+JYsjOP+8Z04ZbhHayuTkRERBpaeTkMG2YeL1jg9SsanEhea1JjZgsLCwGIjo4+4jWLFi1i1KhRdc6NHj2aRYsWHfb6yspKioqK6rRmx26HnpeYx2s/4qI+rQD4bPVeC4sSERERaXhNJsy63W6mTJnC6aefTo8ePY54XWZmJvHx8XXOxcfHk5mZedjrp02bRkREhKclJSXVa91NxoGhBlu+5fyUIPwdNjZmFLElq9jaukREREQaUJMJs5MmTWLdunXMmDGjXt936tSpFBYWelp6enq9vn+TEd8DWnQBVxURu75heCdzIthnq/dYXJiIiIhIw2kSYXby5Ml8+eWX/Pjjj7Ru3fqo1yYkJJCVlVXnXFZWFgkJCYe93ul0Eh4eXqc1SzZbne1tL+rTEjCHGjShYdEiIiLSUAIDzeZjLA2zhmEwefJkZs6cyQ8//EC7du2O+ZohQ4Ywd+7cOufmzJnDkCFDGqpM79HzUvNx50+Mau0mJMDB7vxyVqblW1uXiIiINKygIFi40GxePvnrRFkaZidNmsS7777L9OnTCQsLIzMzk8zMTMrLa5eUmjhxIlOnTvX8fOedd/LNN9/w9NNPs2nTJh5++GGWL1/O5MmTrfgKTUtUW2g9CDAI2vIZo7ubvdWaCCYiIiLNlaVh9uWXX6awsJCzzjqLxMRET/vggw8816SlpZGRkeH5eejQoUyfPp3XXnuN3r178/HHHzNr1qyjThrzKQe2t/31Qy7qa65q8OWvGVS7fGsBZREREfENTWqd2cbQLNeZPVhpDjzdGdw11Nz0E6e9kU1OSRVvXD/QszuYiIiINDNVVXDPPebxU09BQIC19Zwir11nVupBSCx0OR8Av9XvcEGv/RPBVmlVAxERkWbL5YKffzaby2V1NY1KYbY56n+d+fjrB4zrHgnAdxuyKKuqsawkERERkYagMNsctTvLnAxWWUTvwh9Ijg6mrMrFnA1Zx3ihiIiIiHdRmG2O7Hbody0AtpVvedac/VyrGoiIiEgzozDbXPWZAHY/2L2My1oXADB/yz7ySqusrUtERESkHinMNldh8Z6JYMk7P6J7y3Bq3AZfr804xgtFREREvIfCbHN20ESwi3tGAfDxit3W1SMiIiJSzxRmm7N2Z3kmgl0WuBw/u43V6QVsziy2uDARERGpV0FBsHy52bSdrTQbB00EC1//LiO7mpsmfLAs3cqqREREROqNwmxzd9BEsBtSygD4dNVuKmt8a0FlERERaZ4UZpu7sHjofB4AA3I/JyE8kIKyar5brzVnRUREmo2qKrj3XrNV+dbKRQqzvmDA9QDYf/2Qq/rGAvDhcg01EBERaTZcLpg712zazlaanXZnQWQbqCxkQthKbDZYsDWH9LwyqysTEREROSUKs77Abof+5kSwmPVvcEaHGAA+Uu+siIiIeDmFWV/R7zrwC4KMNdzWztw44cPlu3G5DWvrEhERETkFCrO+IiQG+k4AYFDGe0QF+5NZVMFPW/ZZXJiIiIjIyVOY9SWn3QbYcGybw/91NWc6zliWZm1NIiIiIqdAYdaXxHSArhcAcKXrcwDmbswmu7jCyqpERERETprCrK8ZegcAEVtnMrKVmxq3wacr91hclIiIiJySwEBYsMBsgYFWV9OoFGZ9TdIgSDoNXFX8KXI+YG5vaxiaCCYiIuK1bDYICjKbzWZ1NY1KYdYXDb0dgK57PqJFQDU7c0pZvCPP4qJERERETpzCrC/qPAaiO2CrKODB1isBeG9JqsVFiYiIyEmrqoKHHzabtrOVZs/ugCGTABhd/CkOXHyzLlMTwURERLyVywVffmk2bWcrPqH3lRAcQ0BxOrfFb6DGbTBjqXYEExEREe+iMOurAoJh4E0A/MH2JWAwfUkaNS63tXWJiIiInACFWV826CbwCySqYC2jg7eSWVTB9xuzra5KRERE5LgpzPqykFjoezUAfw2ZCRi8u1gTwURERMR7KMz6umF/Ar9AkorXcJb9VxZuy2H7vhKrqxIRERE5Lgqzvi68JQy8EYCHQ9U7KyIiIt7lpMJseno6u3fv9vy8dOlSpkyZwmuvvVZvhUkjOuOPEBBK26otjLYv4+MVuymrqrG6KhERETlegYEwZ47ZtJ3tsV111VX8+OOPAGRmZnL22WezdOlS/vKXv/Doo4/Wa4HSCEJi4bRbAbjP+QmlFVV8vnqvxUWJiIjIcbPZICrKbNrO9tjWrVvHoEGDAPjwww/p0aMHv/zyC++99x5vvvlmfdYnjWXIZAiMoJ2Rzlj7L7y9KBXDMKyuSkREROSoTirMVldX43Q6Afj++++58MILAejSpQsZGRn1V500nqBIGHoHAHf5f8KWjDxWphVYWpKIiIgcp6oq+Mc/zKbtbI+te/fuvPLKKyxYsIA5c+Zw7rnnArB3715iYmLqtUBpRINvgZAWtLFlcanjJ00EExER8RYuF3z0kdm0ne2x/eMf/+DVV1/lrLPO4sorr6R3794AfP75557hB+KFnKFwxl0A3OH3KXN+TSWzsMLiokRERESOzO9kXnTWWWeRk5NDUVERUVFRnvM333wzwcHB9VacWGDAH2DRi7Qs2sNlzOGV+R15+MLuVlclIiIiclgn1TNbXl5OZWWlJ8impqby3HPPsXnzZuLi4uq1QGlk/oFw5j0A3Ob3GZ8t3UR2kXpnRUREpGk6qTB70UUX8fbbbwNQUFDA4MGDefrppxk3bhwvv/xyvRYoFuh7NUZ0B1rYiriVT3hl/g6rKxIRERE5rJMKsytXrmTYsGEAfPzxx8THx5Oamsrbb7/N888/X68FigUc/tjG/AOA6x3fsGjJL2QXq3dWREREmp6TCrNlZWWEhYUB8N1333HxxRdjt9s57bTTSE3VDPhmIeVsjE7n4m9zcb/tDV6bt93qikREREQOcVJhtmPHjsyaNYv09HS+/fZbzjnnHACys7MJDw+v1wLFOrZzp+G2BzDMsY6spR+zr7jS6pJERETkcJxO+Pxzs+3fC8BXnFSYffDBB7n77rtp27YtgwYNYsiQIYDZS9u3b996LVAsFN0e2+nmRgr32t/mjXkbLC5IREREDstuh5YtzWY/qXjntU7q21566aWkpaWxfPlyvv32W8/5kSNH8uyzz9ZbcWI927A/URHckta2HEKWvUBOiXpnRUREpOk46eiekJBA37592bt3L7t37wZg0KBBdOnSpd6KkyYgIBjn+dMAuNH2OR/NWWhxQSIiInKI6mr417/MVl1tdTWN6qTCrNvt5tFHHyUiIoI2bdrQpk0bIiMj+dvf/obb7a7vGsVitm4XkRs3BKetmk6rHyev1Lf2fBYREWnyamrgnXfMVlNjdTWN6qTC7F/+8hdefPFFnnjiCVatWsWqVat4/PHHeeGFF3jggQfqu0axms1G9KXPUoODkbblfP/FdKsrEhEREQFOcjvbt956i//+979ceOGFnnO9evWiVatW3HbbbTz22GP1VqA0Dba4ruzuNJG2W95g0MZpZOWNIz460uqyRERExMedVM9sXl7eYcfGdunShby8vFMuSpqmNhc/Qq49hra2TNbNeNDqckREREROLsz27t2bF1988ZDzL774Ir169TrloqRpsgVGkH/m3wAYlvUuuzatsrgiERER8XUnNczgySef5Pzzz+f777/3rDG7aNEi0tPT+frrr+u1QGlaOg6/il+XvkWvsiVUzroD7v0JbDaryxIREREfdVI9s8OHD2fLli2MHz+egoICCgoKuPjii1m/fj3vvPNOfdcoTYnNRvjF/6LMcNK54le2z3nN6opERETEh9kMwzDq683WrFlDv379cLlc9fWW9a6oqIiIiAgKCwu19e4pmP3qVMZk/JsiWzhhd6/CFhJrdUkiIiK+y+2GXbvM47ZtvX4XsBPJa979TcUy/a+4n01GMuFGEXs+/JPV5YiIiPg2ux3atzeblwfZE+Vb31bqTVxkGKt6P4zbsNE6dRY123+yuiQRERHxQQqzctLGnn8Rn9jPAaD0k8lQU2lxRSIiIj6quhpee81sPrad7QmtZnDxxRcf9fmCgoJTqUW8TKjTD9fvHiD7+yXElaVSNfuvBIx9yuqyREREfE9NjRlkAa65Bvz9ra2nEZ1Qz2xERMRRW5s2bZg4cWJD1SpN0CVDu/N80G0ABKx4DdbMsLgiERER8SUn1DP7xhtvNFQd4qX8HXbOuvA6/jV9I3f6zcT9+Z3YW3SBln2sLk1ERER8gMbMyikb2TWONe1v4QdXH+yuCowPJkBprtVliYiIiA9QmJVTZrPZeOiintxj3M5Odzy2wt3w8XXgqrG6NBEREWnmFGalXrSJCWHCmT25ufpPlBEIO3+C7x+yuiwRERFp5hRmpd7celZHyiJSuKvqFvPEohdh7cfWFiUiIiLNmsKs1JugAAcPju3GN+5BvOy6yDz52WTI2mBtYSIiIs2d0wlvv202p9PqahqVwqzUq3O6xTO8Uwueqr6MtYH9oaYcPpwIlSVWlyYiItJ82e3QrZvZtJ2tyMmz2Ww8fGF3/Bx+XFtwExVB8ZC7Fb64EwzD6vJERESkmVGYlXrXLjaEm85sRx7hTHHdiWFzwLqPYfnrVpcmIiLSPFVX1w4z8LHtbBVmpUFMGtGRlhGBfFPUlvnJk8yT39wHe1dbWpeIiEizVFMDzz9vthrfWhrT0jD7008/MXbsWFq2bInNZmPWrFlHvX7evHnYbLZDWmZmZuMULMctOMCPB8d2A+DmbUMobTcaXFXw0bVQXmBtcSIiItJsWBpmS0tL6d27Ny+99NIJvW7z5s1kZGR4WlxcXANVKKdidPcEhndqQZXL4K6qmzEikyF/F3w2SeNnRUREpF5YGmbHjBnD3//+d8aPH39Cr4uLiyMhIcHT7D42a89b2Gw2HrmwOwEOO99ur+SXfk+DIwA2fQm/vGB1eSIiItIMeGUK7NOnD4mJiZx99tn8/PPPR722srKSoqKiOk0aT9vYEG4Z3h6APy10UDny7+YTcx7UhgoiIiJyyrwqzCYmJvLKK6/wySef8Mknn5CUlMRZZ53FypUrj/iaadOmERER4WlJSUmNWLEA3DaiI0nRQWQWVfBM/jAYeCNgwMz/g63fW12eiIiIeDGbYTSNwYs2m42ZM2cybty4E3rd8OHDSU5O5p133jns85WVlVRWVnp+LioqIikpicLCQsLDw0+lZDkBczdmccNby/Gz25h9x+mkLPwjrPsE/INh4meQNMjqEkVERLxXeTkMG2YeL1gAQUHW1nOKioqKiIiIOK685lU9s4czaNAgtm3bdsTnnU4n4eHhdZo0vpFd4xnVNZ4at8EDn2/AGPcydBgJ1WXw3mWQvdHqEkVERLyX0wmvvmo2bWfrXVavXk1iYqLVZchxeGhsN5x+dhbvyOPzdTlwxTvQeiBUFMA74yE/1eoSRUREvJPdDv37m83HJsZb+m1LSkpYvXo1q1evBmDnzp2sXr2atLQ0AKZOncrEiRM91z/33HN89tlnbNu2jXXr1jFlyhR++OEHJk2aZEX5coKSooOZPKIjAA9/vp6Mcjtc9SG06ArFGfDOOCjJtrZIERER8SqWhtnly5fTt29f+vbtC8Bdd91F3759efDBBwHIyMjwBFuAqqoq/vSnP9GzZ0+GDx/OmjVr+P777xk5cqQl9cuJu3l4e3q0Cie/rJo73l9FjTMSrvkUIpIhbwe8czGU51tdpoiIiHepqYEPPzSbj+0A1mQmgDWWExlQLA0jNbeUC55fSHFlDbed1YE/n9sFcrfD6+dCabY59OCaWeAMtbpUERER76AJYCKNp01MCE9c0guAf8/bzrzN2RDTASbOgsBI2L0MZlwJ1RWW1ikiIiJNn8KsWOL8Xolcc1obAO76cA0ZheUQ3x2u/hQCQmHnT/Dx9eCqtrhSERERacoUZsUyfzm/K91bhpNXWmWOn3W5oXV/uHIG+AXC5q9h1q3gdlldqoiIiDRRCrNimUB/By9d1Y9Qpx/LduXzzJwt5hPthsHlb4PdD9Z+BF/dBW63tcWKiIhIk6QwK5ZqGxvCE5f0BA4aPwvQaTRc/B+w2WHFm+bWtzVV1hUqIiIiTZLCrFjugl4tufq0ZMAcP5tVtH/iV4+LYdwr+3toP4Tpl0NlsYWVioiISFOjMCtNwl/P70bXxNrxsy73/hXjel8BV34A/iGw40d483xtrCAiIvJbAQHw3HNmCwiwuppGpTArTYI5frYvwQEOluzM4/m5W2ufTBkF130BwbGQsQb+d7a5Lq2IiIiYHA444wyzORxWV9OoFGalyWjfIpTHx5vjZ5//YSu/bMupfbJVf7jhO4hqC/m7zEC7Z4UldYqIiEjToTArTcq4vq24fEBrDAPu/GA1+4ora5+M6QA3zIHE3lCWC29eAJtnW1esiIhIU1FTA198YTYf285WYVaanEcu7EFKXCj7iiu568PVuN0H7bgcGgfXfQUdRkJ1Gcy4Cpa8Zl2xIiIiTUF1NTzyiNmqfWvDIYVZaXKCAhy8NKEfgf52FmzN4eX5vxkf6wyDqz6AfhPBcMPse+Dbv2gtWhERER+kMCtNUqf4MB69sAcAz8zZwuIduXUvcPjD2Odh5IPmz4tehI8mQlVZI1cqIiIiVlKYlSbrsgGtGd+3FS63weTpK8ksrKh7gc0Gw/4El/wPHAGw8Qt4ayyU7LOmYBEREWl0CrPSZNlsNh4b34MuCWHklFQxafpKqmoOM5Sg56Uw8TMIjIQ9y+G/v4OsDY1er4iIiDQ+hVlp0oID/Hjl6v6EBfqxIjWfx7/eePgL2wyFG7+H6PZQkAb/Owe2fNe4xYqIiEijU5iVJq9tbAjPXN4HgDd/2cVnq/cc/sLYFLhxLrQdBlXF8P4VsOglMIzDXy8iIiJeT2FWvMLZ3eKZPKIjAPd9spZNmUWHvzA4Gq7+tHalg2/vhy/uBJdvLVMiIiI+JiAAnnjCbNrOVqRp+uPZnRiWEkt5tYtb3llBUcURAqpfgLnSwTmPATZY+Ra8Mx7K8hq1XhERkUbjcMCoUWbTdrYiTZPDbuNfv+9Lq8ggduWWcdcHq3G5jzCEwGaDoZPhyhkQEAq7FsBrwyFjTeMWLSIiIg1KYVa8SnRIAC9f3Y8APzvfb8zmH99sOvoLOp9rboEb1a52YtivHzZOsSIiIo3F5YLvvzeby2V1NY1KYVa8Tq/WkTx1aS8AXvtpBzOWph39BfHd4OYfoePZUFMBn94E30zVOFoREWk+qqrgvvvMVlVldTWNSmFWvNJFfVpx58gUAP46ax0/b8s5+guCoswtcIfdbf68+N/w9jhtsCAiIuLlFGbFa00ZlcKFvVtS4za49d0VbMsuOfoL7A4Y+QBc8a45jjZ1Ibw8BFa+A+7DbMYgIiIiTZ7CrHgtm83Gk5f2ol9yJEUVNdzw1jLySo/jn1a6jjXXo43tDKX74PPJ8N+RkL6s4YsWERGReqUwK14t0N/BaxMH0DoqiNTcMm55ZwWVNccx8D2uC9yyEM7+GwSEwd6V8L9R8On/QVFGwxcuIiIi9UJhVrxebKiTN64bSJjTj6W78rjrgzXUuI5j2IBfAJx+B9y+AvpcbZ77dQa8OAAWv6KhByIiIl5AYVaahZT4MP59dT/8HTa+WpvB3R+tOfIatL8VFg/jXoIbf4BWA6CqBL65F94ZB4W7G7RuEREROTUKs9JsDEtpwUtX9cPPbmPW6r3c+8mvuI830AK07m+uSXveP8E/GHbOh38PhTUfgHEC7yMiItLY/P3hoYfM5u9vdTWNymYYvvWndFFRERERERQWFhIeHm51OdIAvl6bwe3vr8LlNrhyUDKPj++BzWY7sTfJ3Q6f3gx7lps/d7sIzn8WQmLqv2ARERGp40Tymnpmpdk5r2ciz1zeG5sN3l+axsOfr+eE/84W0wH+8C387q9g94MNn5nLeG38omGKFhERkZOiMCvN0kV9WvHUpWagfWtRKo99tfHEA63DD868x1zGq0UXKMmCD66GDydCcVbDFC4iInIyXC5YuNBs2s5WpHm4tH9rHh/fE4D/LtzJ099tObk3atkHbp4Pw/4ENofZS/vSIFj1nsbSiohI01BVBVOmmE3b2Yo0H1cOSuaRC7sD8OKP23jpx20n90b+gTDyQbh5HiT2hooC+Ow2eGc85O+qr3JFRETkBCnMSrN37dC23DemCwBPfbuZN37eefJvltjLXMLr7EfBLxB2/AgvDoSv/wzFmfVUsYiIiBwvhVnxCbcM78Adv+sIwCNfbOCDZWkn/2YOPzj9Trj1F2g3HFxVsPRV+Fdv+OZ+KMmup6pFRETkWBRmxWf88exO3HhGOwDu+3Qtn63ec2pvGNMBJn4GEz+HpMFQUwGLX4LnesF3D0BZXj1ULSIiIkejMCs+w2az8ZfzuzJhcDKGAXd9uIZv15/i0ACbDdoPN5fxuvoTaNUfasrhl+fNSWIbPq+f4kVEROSwFGbFp9hsNv52UQ8u7tsKl9tg0nsrT72H1nxj6DjKXMbrqg/NpbxK98GH18BH10Np7ql/hoiIiBxCYVZ8jt1u48lLe3FRn5bUuA3unLGa1xeewqSwg9ls0Gk0/N9PtUt5rf90fy/tZ/XzGSIiIr/l7w9//rPZtJ1t86btbOUAt9vg0S838OYvuwCYNKIDd5/T+cS3vj2aPSvhs0mQvcH8uft4c4mv6Pb19xkiIiLNjLazFTkOdruNh8Z2457RnQF46cftTP10LTUud/19SKt+5tq0w+7e30s7E57vB+9fBTsXaNMFERGRU6SeWRFgxtI07p+5FrcB53SL5/kr+xLo76jfD9m7Cn54DLbNqT2X0BNOmwQ9LgY/Z/1+noiI+A63G1atMo/79gW7d/dXnkheU5gV2e+bdZncMWMVVTVuBrWN5rWJ/YkMDqj/D9q3GZa8AqvfN1c+AAiNh9NugwHXQ2BE/X+miIg0b+XlMGyYebxgAQQFWVvPKdIwA5GTcG6PBN66fhBhTj+W7srj4pd/IT2vrP4/qEVnuOBZuGsDjHwIwlpCSRZ8/xA82wO+fxiKs+r/c0VERJohhVmRgwzpEMPHtw4lMSKQHftKGf/vX/h1d0HDfFhwNAy7C+5cA+NehtjOUFkEC5+F53rCF1Mgr55WWRAREWmmFGZFfqNzQhgzbzudronh5JRUcsWri5m7sQF7Sv0CoM9VcNti+P10aD0QXJWw4g14cQB89ScoPsXNHURERJophVmRw0iICOTD/zuNYSmxlFe7uOnt5by3JLVhP9Ruhy7nww1z4Lqvof0IcNfAsv/Cv/qYww/K8xu2BhERES+jMCtyBGGB/rx+3UAu698atwF/mbmOp77dRIPPmbTZoO3pMHEWXPul2VNbU24OP/hXb1jwDFQUNmwNIiIiXkJhVuQo/B12nry0F1NGpQDmWrR3f/Qr1fW5Fu3RtBtm9tT+/n2I62aG2LmPwNNdzM0Ydi/XWrUiIuLTtDSXyHH6YFka989ch8ttcGanFvx7Qj9CnX6NV4DbBWs/hoXPwL5Ntefje0D/66DnZRAU2Xj1iIhI01FdDe+/bx5feaXXb2mrdWaPQmFWTsUPm7KY9N4qyqtd9GgVzuvXDSQuLLBxizAMSF8CK940dxSrqTDP+4fAwD/AkNshLL5xaxIREalHCrNHoTArp2p1egF/eHMZeaVVJEUH8db1g2jfItSaYsrz4dcPYfkbsG+jec4v0OypHXoHRLSypi4REZFToDB7FAqzUh925ZRy7RtLSc0tIzLYnxev7McZKbHWFWQYsHUO/PQk7F5mnnMEQJ8JMPR2iOlgXW0iItLw3G7YtH8IWpcu2s62OVOYlfqSU1LJDW8tZ016AXYbTB3TlRuHtcNms1lXlGHAzvkw/ylIXVh7PnmIuZZtt3EQqP/uRUSaHR/ezlZhVuQUVFS7+OusdXy8YjcAF/ZuyT8u6UVQgMPiyoDUX8zlvLZ9D8b+1Rf8gqDrBdD7Smg3HByNOIFNREQajsKs71CYlfpmGAbvLE7l0S82UOM26JoYzmvX9CcpOtjq0kxFe+HXD2D1+5Czufa8MwI6jICUc6DjKE0aExHxZgqzvkNhVhrK0p153PbeCnJKqogM9ufZK/owonOc1WXVMgzYuxJWT4d1n0J5Xt3nE3tDymjodqG53JeVwyVEROTEKMz6DoVZaUgZheXc8s4K1uw2d+iaOKQNU8d0bRrDDg7mdsGelbBtDmz9Dvauqvt8dAfoPg66j1ewFRHxBgqzvkNhVhpaRbWLJ2Zv4s1fdgHQPjaEZ67oQ5+kSEvrOqqSbNg2FzZ9aY6xPbB2LZjBtuel0O9aLfUlItJUKcz6DoVZaSwLtu7j7o/WkFVUicNuY/KIjkz+XUf8HU18uZTKYtjyrbkhw8HB1uaAzmNgwB+g/QivX/ZFRKRZUZj1HQqz0pgKyqp44LP1fLFmLwC9W0fw7BV9rNtk4URVFsPmb8zdxg5e6iu6PfS/3txCNzzRsvJERGS/6mp44w3z+PrrtZ1tc6YwK1b4bPUeHpi1jqKKGoL8Hfz1gq5cNSjZ2jVpT1T2Jlj+Oqx5HyqLas+37AedzzN7beO7a3ytiIicMoXZo1CYFatkFJZz90dr+HlbLgAju8TxxCW9aBHmtLiyE1RVCms/hlXvwO7lwEG/hUQmQ4ffQWgCBEaYGzQERpgtpiOEt7SsbBER8R4Ks0ehMCtWcrsNXv95J09+s5kql5uYkAD+cUkvRnXz0jVei7Ng67ew6WvY8WPdiWOHsEHHkebwhE7nasMGEZH65HbDrl3mcdu2Xj+vQWH2KBRmpSnYlFnElBmr2ZRZDMCVg5KZel4XwgO9eIxTVRnsmAe7l0FFodkqi8zH8nzI2VJ7bVgi9L0G+k2EyCTLShYRaTY0Acx3KMxKU1FR7eKf327mvwt3AhAf7uSRC3twbo8EiytrILnbYeVbsOo9KMsxz9nsZi/t4Fug3ZkabysicrJ8OMxa2gf9008/MXbsWFq2bInNZmPWrFnHfM28efPo168fTqeTjh078uabbzZ4nSINIdDfwV8v6Mb0mwbTNiaYrKJKbnl3BTe/vZzMwqP9c72XiukAZz8Kd22AS183w6vhhs1fw9sXwsunw8q3obrc6kpFRMSLWBpmS0tL6d27Ny+99NJxXb9z507OP/98RowYwerVq5kyZQo33ngj3377bQNXKtJwhnaI5ZspZzJpRAf87Da+25DFqGfm8/aiXbjczfAfTvyc0OMSuPYLmLQMBt4I/sGQvR4+vx2e7Q5zH4X0peCqtrpaERFp4prMMAObzcbMmTMZN27cEa+59957+eqrr1i3bp3n3O9//3sKCgr45ptvjutzNMxAmrJNmUVM/XQtq9IKABjULpoXruxLfHigtYU1tPJ8WPkOLP0PFKbVnvcPhqRB0OYMaHs6tOpvhmEREanLh4cZeNV04kWLFjFq1Kg650aPHs2UKVOO+JrKykoqKys9PxcVFR3xWhGrdUkI5+NbhjJ9SSpPzN7E0p15nP/8Ap7/fV+Gdoy1uryGExQFp98Bp90Gm7+CXz+E1F+gPM+cVLZjnnmdwwkt+5oBN/k0aD0IQltYWbmIiFjMq8JsZmYm8fF1lzCKj4+nqKiI8vJygg7zt5Bp06bxyCOPNFaJIqfMYbdxzZC2nN4xltveW8mmzGKu/t8S/jiqE5NGdMRub8aTpBx+0O0is7ndsG8TpP4Muxaaj6X7IH2x2X553nxNdAdoPxw6jTHH4fo3815sERGpw6vC7MmYOnUqd911l+fnoqIikpK0FJA0fe1bhDJr0uk8+Nk6Ply+m6fnbGF5aj7PXtGH6JAAq8treHY7xHcz26CbwDAgbwekL4G0xebjvk2Qt91sy18H/xDoMMLckazTaAhpxr3ZIiIH8/ODa66pPfYhXvVtExISyMrKqnMuKyuL8PDww/bKAjidTpxOjbET7xTo7+DJS3szsG00D3y2jvlb9nHB8wv4+/gejOgc513b4Z4qm81cESGmA/S5yjxXng9pS2Drd7B5NhTvhU1fmg0btB5ohtpO52qrXRFp3vz94c47ra7CEl4VZocMGcLXX39d59ycOXMYMmSIRRWJNI7LBiTRs3UEt727kh05pfzhzeUMaR/D/ed1pWfrCKvLs05QFHQ+12znPw0Za8xQu/lryPwVdi812w9/g4gkM9i2HwEtukBUW+1CJiLSDFi6mkFJSQnbtm0DoG/fvjzzzDOMGDGC6OhokpOTmTp1Knv27OHtt98GzKW5evTowaRJk/jDH/7ADz/8wB133MFXX33F6NGjj+sztZqBeLOSyhpe+GErb/y8i6oaNwAX9WnJ3ed0Jik62OLqmpjCPWaP7ZZvzAlkv91q1+4H0e0hJgViO5orJbQ/CwJ9+C8HIuK93G7IzDSPExK0nW1jmTdvHiNGjDjk/LXXXsubb77Jddddx65du5g3b16d1/zxj39kw4YNtG7dmgceeIDrrrvuuD9TYVaag935ZTzz3RZmrt6DYUCAw861Q9sweUQKEcFevCVuQ6kqg10LzGC7e5m5G1l12aHX2f0geQiknA0p55g9uBqaICLewIeX5moy68w2FoVZaU7W7Slk2uyN/LwtF4CIIH/uGJnCNae1IcDPu/9W3qDcbijaA7lbIWebOZFs50/mzweLSIKkweZyYC37QGJvcIZZUrKIyFEpzPoOhVlpbgzDYP6WfUz7ehObs4oBaBMTzH3nduHcHgm+NUnsVOXtgK3fm8MTdi04dGgCNohNMUNtfHeI624+hrdUD66IWEth1ncozEpz5XIbfLQ8nafnbGFfsblRSP82Ufz1/K70TY6yuDovVFUGaYtg76r9bTUU7T78tYER+4NtN3NoQlxXaNEVQmIatWQR8WEKs75DYVaau9LKGl79aQev/bSdimpzkti4Pi25d0wXEiO8+zc3y5Xsg4zV5qoJ2Rsgaz3kbAXDdfjrQ+IgrgskDzXH4bbsC3ZHo5YsIj5CYdZ3KMyKr8gsrOCf323mk5W7MQwI9Ldzy/AO/N+ZHQgKUKCqNzWVkLPFDLbZGyB7E+zbCAVph14bFA0dR0LHs6HD77QVr4jUH4VZ36EwK75m7e5CHvliPctT8wFIjAjkvjFduLB3S42nbUiVJZCzGTLXwvYfYPs8qCyse01ovDksoUUXswf3wPq3QdHalldETozCrO9QmBVfZBgGX63NYNrXm9hTUA5Ar9YR/Hl0F85I0ZavjcJVbS4LtnUObJtjhtyj8QuC4GhzY4igKIhuB/E9zQln8d0hKLJRyhYRL1FVBc8+ax7/8Y8Q4N3bnivMHoXCrPiyimoX/1u4k5d+3EZZlTnO84yOsfz53M70ah1pbXG+pqLIHJ6wb9P+ttkcolC058hjcA8WkQwJPSCxT+3SYaFxDV21iEijUJg9CoVZEcgpqeTFH7bx3pJUql3mbwHn9UzgT+d0pkOLUIur83GGAZVFUJ5f20pzzcCbtR6y1kFh+uFfG97aDLWxKWbPrp8T/AJrHxN7mysuiIg0cQqzR6EwK1IrPa+MZ7/fwsxV5k5iDruNKwYmMWVUCnFhGrPZZJXnm8E2c625ZNjeVWYvL8fx23lCT+h9JfS4FMLiG7pSEWkshgEFBeZxZKTXr32tMHsUCrMih9qUWcQ/v93M9xuzAQgOcHDTsPbcdGZ7Qp1+Flcnx6WyGDJ+hb0roXC3ucpCTaW58UNNpdnbm7YY3NXm9TaHuaJCr8shpkPt2FxnhNfv6S7ikzQBzHcozIoc2ZIduTw+exNr0gsAiA0N4M5Rnfj9wCT8HQo4Xq8sD9Z/CmtmmJPRDstmTi4LiTOHJMR3h/ge5mNEktf39og0WwqzvkNhVuToDMNg9rpMnvxmE7tyywBze9xbhnfg4n6tcPppjdpmIWcb/DrD3Lq3NNcculBdevTXOMMhpiNEJkNkEkS2MY8jkswlxQKCG6V0ETkMhVnfoTArcnyqaty8vzSN5+duJbe0CoD4cCc3DWvPlYOSCdHwg+anpgoqCsxgW5AO2ev3Tzpbb662cGCIwpGEtYTo9uYyYjEdzLAbEgvBMWYLigY/714uSKTJUpj1HQqzIiemrKqG95em85+fdpBZVAFAZLA/1w9tx7VD2xAZrHDiE2qqzElm+TvNoFuQZq6qUJAK+WmHbghxJM5wCEs0V1yI6bj/cf9xYDjY/TSUQeRkKMz6DoVZkZNTWeNi5so9vDJ/u2f4QUiAg6sGJ3PjsPbEh2v1A59Wlgd5O+q2gjTzfFkulOeB4T6+97I5zFDr8Af/YIjtZI7fjds/hjeuKzjDzGsNA1xV5iQ3dw0ERmoCm/gmhVnfoTArcmpcboOv12bw73nb2ZhRBECAw84l/Vtzy/D2tIkJsbhCaZLcbnMIQ1me2Zubuw1ytkLuVnP8btHuE3u/gDBwVZpB9mBhLaHrWOh2ESSfBnaN8RYfoTDrOxRmReqHYRjM27yPf8/bxrJd+QDYbXB+r5b84fS29E2OsrhC8So1lVBdbvauuqrNR3c1VBSaO6Nlr4esDZC9AYozju89Q1pAlwug02jAZr6XpxWYG0kknwZJg80hDkdSVQqFe8zxwA6NFZcmqqoKHn/cPL7/fm1n25wpzIrUv6U78/j3vG3M27zPc6536wgmDmnLBb0TtQKC1K+yPHOSmp8THAFm83OaQw52zocNn8Pmr8zQejxsdnMziTanQ5uhZpjO3rA/PK+H/FTAMNfhTRkNXc6HjiMh4AT+FaJor7m5RWIfiGh1Mt9axKcozB6FwqxIw1m/t5D/LdzJl2syqHKZ4yNjQgL4/aAkrj6tDYkR3v3PXuJFaqpg109msE1fAv5BEBhhjqkNjDBbWS6k/mJOajsWR0DdIQ0OJ3QYAR1GmsuSRbSC8Fbm+9psZk9z6i+wfS5sm2uGYzCDc8po6H8dpJytYRAiR6AwexQKsyINL7ekkhnL0nl3cSoZheYKCP4OG5f2b81tZ3UkKVrrkUoTUrgH0hZB6s+QvtQcfnBgwtmBFhRlhuJNX8GmL81xv4cTEAbhieYubNVlBz1hM5csy9tReyq8FfS9BrpdCNUVULrvoJZjBt3wVhDesvYxNE4BWA7PMKDC/P2WwECvXxVEYfYoFGZFGk+Ny82cDVm88csulu7MA8BhtzG+bysmjehIu1hNFhMvZBhmT+umr2DPCjMMF+02hz4cLDQeOo4yhyS0HwHB0bBvC6x8C1ZPN1d4OFF2v9ohEW2HmWN+gyKP77Vul7m8WtZ6sze5VX+vDzxyEE0A8x0KsyLWWLYrj+fnbmXB1hzAnCx2Ye+W3HxmB7q11P8XpRmoKjXHxhbtgeBYcxmxI4XFmkrY+AWseBP2rDR7fkNizUlrIS0gJMZcAaJo9/733GtOfDtkeTObGW6TBpuvd4aZa/k6w8xWnm++/95VkLGm7i5vEclmr3D3i6FVPwVbb6cw6zsUZkWstSotnxd+2MYPm7I953q1juCKgUlc2LslYYH+FlYn0oS5asygnL4Edi00h0Xkbjux9/APgbgu5goRvw22Xc4zQ7jdsb/5mQ0bGK79K0y49h+7wT/QDOGBkebjgRYco53erKAw6zsUZkWahrW7C3ll/na+25BJtcv8bSjI38F5PRP5/aAkBrSJwqaeIpGjK840Q23Gr1BZBBVFUFlc2/yDoGUfaNkXWvYzd1yzO8xl0LbOgQ2zYPM3dYNtfQiKModZhLQwH4OjzbHIfoFm0D1w7Aioe84RYG6WUZ4PJdn7W5Y5jriq1Bw7HJkMkUkQkVT76NBfghVmfYjCrEjTkltSycxVe5ixLJ1t2SWe8ylxoUwYnMz4fq2JCNIfVCINpqoMtn1v9va6Kmt7YN01ZjPc+7cZdtT22trsZiAuLzDX7C3PN4/L882e28bkHwytB5rLqrUZCq0GQMBxTjKtKIT8Xeb3jG5vhnBvpTDrOxRmRZomwzBYmZbPjKXpfPlrBuXV5h+IQf4OLuzdkgmnJdOrdaS1RYrI0R3Y6a0kq7ZntTTbXBvYVWmOFa6pqN0kw1W1/+eq2uddVfvHEO/v1Q2NM5tfkDmGuCAdCtPN7ZILd5uvP5jd3+yNDks0e6b9nOZr/QPNyXuF6WaAzd916KS9oCiI7gAxHcxwG5ls9gZHtDZXk/BvgIBYXWGuprFjnjmMJKYjtOhibtsc3f74e50VZn2HwqxI01dYXs2sVXt4b0kqW7Jqe2t7torgqsHJXNi7JSFO7cQk4vPcbti3CdJ+Mdf1TV0ExXtP7D1CWpi9ziWZx742OMYMtc4Ic9MMTws1d4erLt/fysyQWl1mPheWYIbr8ETzOCAM0hfD9h/NIPvbQH6A3d8cGhLXDRJ6QPz+FpZw6IS9o4XZ6gqzN92LxjIrzB6FwqyI9zAMg+Wp+by3OJWv12Z6NmIIdfpxUZ+WXDU4me4tIyyuUkSaDMMw1wBOX2b2ENdUmK16/6PhNntZo9qaLbINOEPN11aVmusA5+2A3O2Qt93s+S3cY/aY1lk3uJ6FJZrLt8WmmJ+9byPs2wxVJYe/PjjGDLiBEbWT9Vw2+GCl+WswrgNU5pkbg5Tlmu9js0N4a4hqY655HNUWotrVrl8cElf7a3Hwr2dFQe3Y5ZJs6Hpho4RihdmjUJgV8U65JZV8snI37y9NZ2dO7WSV3kmRXDUoiQt6qbdWRBqIYZhDEor2mJPuKovN8FtVagbFqhJzG+SAkP1DG4LMR/8g89riDLMVZZivL8+DhF7mLnLtR0CLzof2tLrd5pCIfZsgax1krjPXCM7depgl2uqJfwiEtjCXdyvLM4eIHLzzHcCUdebEuwamMHsUCrMi3s0wDBZtz+W9pWl8t752JYRQpx8X9mnJlQOT6dlavbUi0kxVl0P2/p7bmvK6k/Xc+yffBceYLSS29rimcv9Y4Z3mY97+x5JMs8f1aD3PgRH7xy/Hw4XPm2N5G5jC7FEozIo0HzkllXy8YjczlqaxK7f2N+LuLcO5clAyY3u31EoIIiLHo7KkdihBZZEZgA8MP/APbPRyFGaPQmFWpPkxDINFO3KZsTSdb9bVjq0N8LNzTrd4LunfmmEdY/Fz2C2uVESkgfjwagYaYCYiXs9mszG0QyxDO8SSV1rFpyt38+HydLZklfDlrxl8+WsGLcKcjO/biov6tKRrQjh2uzZkEBFpDtQzKyLNkmEYrNtTxCcrd/PZ6j3kl1V7nosI8mdg2ygGtI1mYNtoeraKIMBPvbYi4sV8uGdWYVZEmr2qGjc/bs7mkxW7WbA1x7MhwwGB/nZO7xDLZQNa87su8Qq2IuJ9fDjMapiBiDR7AX52RndPYHT3BKpdbjbsLWLZrjyW7sxjeWo+eaVVzN2UzdxN2USHBDC+bysuH5BE54Qwq0sXEZFjUM+siPg0wzDYklXCrNV7+GTFbrKLKz3P9WodwUV9WnFezwQSI7y7l0NEmjkf7plVmBUR2a/G5eanrfv4cNlu5m7K8qxhC9AvOZLzeiZyXs9EWkZ69x8SItIM+XCY1TADEZH9/Bx2ftclnt91iSe3pJIv1uzl67WZLEvNY2VaASvTCvj7VxvpmxzJufuHLbSNDbG6bBERcDjg9NNrj32IemZFRI4hq6iC2WszPMH24N81O8eHMbp7PKN7JNAtMRzbb7ekFBGRE6ZhBkehMCsipyKrqILv1mfy7fosFu/IpcZd+1toQnggg9tHM7hdDIPbR9M+NkThVkTkJCjMHoXCrIjUl4KyKuZuzObb9Zn8tHUfFdXuOs/HhjoZ3D6aMT0SOLtbPE4/3/qnPxGRk6UwexQKsyLSEMqrXKxKy2fxzjyW7MhlVXoBVTW14TY6JIBL+rXi94OS6dAi1MJKRaRZKi+Hs882j+fM8akJYAqzIiINoKLaxZr0AuZv2ccnK3eTVVS75NegttFcPjCJMzrGkhARaGGVItJs+PBqBgqzIiINrMblZt7mfcxYlsYPm7I5aJgtrSKDGNA2igFtoujfJprOCWE47BpnKyInyIfDrJbmEhFpYH4OO6O6xTOqWzyZhRV8tDydb9ZnsjGjiD0F5exZXc5nq/cCEBMSwNjeLbmkX2t6tNLqCCIix6KeWRERi5RU1rA6rYDlqXmsSM1nZWo+pVUuz/MpcaGM79eKcX1aaaMGETk6H+6ZVZgVEWkiql1uFm7N4ZOVu/luQ5ZnApnNBl0TwumdFEmfpAh6J0WSEqfhCCJyEB8OsxpmICLSRPg77IzoEseILnEUVVQze20Gn6zcw9KdeWzIKGJDRhHvLzWvDQ5w0LNVBGN6JHBB75bEhjqtLV5ExCLqmRURaeKyiipYlZbP6vRC1qQX8OvugjrDERx2G8NSYhnftxVnd4snOED9FCI+p7ISbr/dPH7hBXB6919wNczgKBRmRcTbudwGO/aVsHBbDrNW72VNeoHnueAAB8M7taBzQhgd40LpGBdKu9gQbdggIl5FYfYoFGZFpLnZsa+EWav3MmvVHtLyyg553m6DNjEhdG8ZTv82UQxoE03XxDD8HHYLqhUROTaF2aNQmBWR5sowDFamFbB8Vx7bskvYtq+EbdklFFfUHHJtkL+DPkmRDGgbxVmd4+ibFIldE8pEpIlQmD0KhVkR8SWGYbCvuJItWSWsTs9n+f4lwIp+E3BbhDk5u1s853SLZ2iHWAL81Gsr4lXKy2HsWPP4iy+0moGIiDQPNpuNuPBA4sIDOSMlFgC322DbvhKW78pn0Y5c5m3KZl9xJdOXpDF9SRphTj/O7NyC09rHMLhdNB1bhKrXVsQbFBRYXYElFGZFRHyM3W6jU3wYneLDuGpwMlU1bhbtyOXb9ZnM2ZDFvuJKvvo1g69+zQAgKtifAW2jGdwumsHtYujWMlxr3IpIk6FhBiIi4uF2G6xKL2Dh1hyW7splZWoB5dWuOtdEBPkzpH0MQzvGMLRDLB1ahGjbXRGradMEERERs9e2f5so+reJAlKodrlZt6eQpTvzWLIzj6U78ygsr+ab9Zl8sz4TgLgwJ71aR9ItMYyuieF0TQwnOTpYQxNEpFGoZ1ZERI5bjcvN2j2F/LI9l5+35bA8Nd+z7e7BQgIcdGsZztAOsQxLiaVPUqSWAhNpSD7cM6swKyIiJ62i2sWa9AI2ZBSxcf+Wu1uySg4JuGFOP07rEMOZKbEMaBtNu9gQAv21kYNIvfHhMKthBiIictIC/R0Mbh/D4PYxnnM1Ljc7ckpZmZrPgm05/Lwth4KyauZsyGLOhiwAbDZoHRVE+9hQOrQIpUNcCP3bRNE5Pkzjb0VOht0O3brVHvsQ9cyKiEiDcrkN1u8tZMHWHBZs3ceGvUWHrHN7QFyYk2EpLTizUyxndIwlJtS795cXkZOjYQZHcby/OC6Xi+rq6kasTOqDv78/Dof+6VKkKTMMg9zSKrZnl7Ajp5Tt2SVszipm2a48KqrrDk/olhhO76RIeraKoEercDrFh2l4gogPUJg9imP94hiGQWZmJgU+uvBwcxAZGUlCQoL+qVLEy1RUu1iRms9PW/fx05YcNmYUHXKNn91GSnwYPVqG06NVBD1aRdAtMZygAAVckeZEYfYojvWLk5GRQUFBAXFxcQQHBysQeRHDMCgrKyM7O5vIyEgSExOtLklETkF2cQXLduazbm8h6/aYLb/s0H8xs9ugY1woPVpF0CUhzByHGxdKUlSQVlAQ31FRAZddZh5/9BEEBlpbzynSBLCT5HK5PEE2Jibm2C+QJido/+zN7Oxs4uLiNORAxIvFhQVyfq9Ezu9l/sXUMAz2FlawdnchG/YWsnZPIWv3FJFTUsmWrBK2ZJXUeb2/w0abmBA6tAihS4K5/m23xHCSooPUUSHNj2FARkbtsQ9RmD3IgTGywcHBFlcip+LA/auurlaYFWlGbDYbrSKDaBUZxLk9EgAz4GYXV7J2dyHr9hayLbuEHftK2ZFTQkW1m23ZJWzLLuHb9Vme9wl1+tEloXaDh66JYXROCCM4QH8kinijJvH/3JdeeomnnnqKzMxMevfuzQsvvMCgQYMOe+2bb77J9ddfX+ec0+mkoqKi3urR39i9m+6fiO+w2WzEhwcS3y2QUd3iPefdboO9heXs2FfK1uwSNu5fB3drVgkllTUsT81neWr+Qe8D7WJC6JIYRp+kSE5rH0P3lhE4tIuZSJNneZj94IMPuOuuu3jllVcYPHgwzz33HKNHj2bz5s3ExcUd9jXh4eFs3rzZ87PCi4iIHMxut9E6KpjWUcGc2amF53y1y832fQfCbbEn5OaUVLEjp5QdOaV8vdbcpjfM6cegdtGc1j6Gge2iiQr2x99hJ8DPbj467Dj97Nq2V8RilofZZ555hptuusnT2/rKK6/w1Vdf8frrr3Pfffcd9jU2m42EhITGLNPntG3blilTpjBlyhRL30NEpD75O+x0SQinS0I44/vWnt9XXMnGjCLW7y1i+a48lu7Mo7iyhrmbspm7KfuI7xfk72Bw+2jO6BjLGSmx2vRBxAKWhtmqqipWrFjB1KlTPefsdjujRo1i0aJFR3xdSUkJbdq0we12069fPx5//HG6d+9+2GsrKyuprKz0/FxUdOhSL83BWWedRZ8+fXjuuefq5f2WLVtGSEhIvbyXiEhT1yLMSYuwFvt7cTvgchtszChi8Y5cFu/IZXV6IRXVLqpq3FS5atfCLa92MW/zPuZt3gdAbKiT0zvGMKBNFB3jwkiJDyUmJEABV6QBWRpmc3JycLlcxMfH1zkfHx/Ppk2bDvuazp078/rrr9OrVy8KCwv55z//ydChQ1m/fj2tW7c+5Ppp06bxyCOPNEj93sYwDFwuF35+x77tLVq0OOY1IiLNlcNu86xje+Ow9nWeMwyDapdBtctNWl4ZP2/LYcHWHJbuzCOnpJLPVu/ls9V7PddHBfuTEhdGx/hQuiaG071lOF004Uzqm80G7dvXHvsQr1uAb8iQIUycOJE+ffowfPhwPv30U1q0aMGrr7562OunTp1KYWGhp6Wnp5/Q5xmGQVlVjSXteJcAvu6665g/fz7/+te/sNls2Gw2du3axbx587DZbMyePZv+/fvjdDpZuHAh27dv56KLLiI+Pp7Q0FAGDhzI999/X+c927ZtW6eX12az8d///pfx48cTHBxMSkoKn3/++Qn9WqalpXHRRRcRGhpKeHg4l19+OVlZtTOM16xZw4gRIwgLCyM8PJz+/fuzfPlyAFJTUxk7dixRUVGEhITQvXt3vv766xP6fBGR+mCz2QjwsxPi9KNrYjg3DmvPW38YxOqHzub9m07j9t91ZFTXOJKjg7HZIL+smqW78pi+JI0HZq3j4n//Qo+HvmXk0/O44/1VvDp/Oz9vy6GgrMrqrybeLDAQPvzQbF6+xuyJsvSvhbGxsTgcjjqBBiArK+u4x8T6+/vTt29ftm3bdtjnnU4nTufJ7+1dXu2i24PfnvTrT8WGR0cf19/c//Wvf7FlyxZ69OjBo48+Cpg9q7t27QLgvvvu45///Cft27cnKiqK9PR0zjvvPB577DGcTidvv/02Y8eOZfPmzSQnJx/xcx555BGefPJJnnrqKV544QUmTJhAamoq0dHRx6zR7XZ7guz8+fOpqalh0qRJXHHFFcybNw+ACRMm0LdvX15++WUcDgerV6/G398fgEmTJlFVVcVPP/1ESEgIGzZsIDQ09JifKyLSWJx+DoZ0iGFIh9p1ysurXGzfZy4Ptjmr2DMud19xJdv3lbJ9Xymfr6ntxW0dFbR/694IOsaF0jIiiISIQGJCAjTRTOQILA2zAQEB9O/fn7lz5zJu3DjADD1z585l8uTJx/UeLpeLtWvXct555zVgpU1bREQEAQEBBAcHH/YvAY8++ihnn3225+fo6Gh69+7t+flvf/sbM2fO5PPPPz/qr/t1113HlVdeCcDjjz/O888/z9KlSzn33HOPWePcuXNZu3YtO3fuJCkpCYC3336b7t27s2zZMgYOHEhaWhr33HMPXbp0ASAlJcXz+rS0NC655BJ69uwJQPv27Q/9EBGRJiYowOEZrnCw7OIKNuw1g+36vYWs31tEam4Zu/PL2Z1fzux1mXWuD3DYiY9wkhgRROuoIJKjg0mODqZNTDBJ0cG0CHVqXK74LMsH7Nx1111ce+21DBgwgEGDBvHcc89RWlrqWd1g4sSJtGrVimnTpgFmMDvttNPo2LEjBQUFPPXUU6SmpnLjjTc2SH1B/g42PDq6Qd77eD67PgwYMKDOzyUlJTz88MN89dVXZGRkUFNTQ3l5OWlpaUd9n169enmOQ0JCCA8PJzv7yLN8D7Zx40aSkpI8QRagW7duREZGsnHjRgYOHMhdd93FjTfeyDvvvMOoUaO47LLL6NChAwB33HEHt956K9999x2jRo3ikksuqVOPiIg3iQsLJK5zIGd1rl2CsrCsmvUZB7buLSI1t5SMwgr2lVRS5XKTnldOel45S3ce+n7BAQ66JobTo2U43VtF0L1lOClxYQT4ed1oQjlZFRUwcaJ5/PbbPjXUwPIwe8UVV7Bv3z4efPBBMjMz6dOnD998841nUlhaWhp2e+3/GfPz87npppvIzMwkKiqK/v3788svv9CtW7cGqc9ms3n9IP3frkpw9913M2fOHP75z3/SsWNHgoKCuPTSS6mqOvp4rQP/5H+AzWbD7XYf4eoT9/DDD3PVVVfx1VdfMXv2bB566CFmzJjB+PHjufHGGxk9ejRfffUV3333HdOmTePpp5/m9ttvr7fPFxGxUkSwP0M7xDK0Q2yd89UuN9nFlWQUlLO3sIL0vDLS88pIzS0jLa+MjMJyyqpcrEjNZ8VBG0EEOOy0iw0hMTKQxIhAEsKDzMeIQNq3CKFVpLb1bVYMA3bsqD32IU0ipU2ePPmI/7x9YDzlAc8++yzPPvtsI1TlXQICAnC5XMd17c8//8x1113H+PHjAbOn9sD42obStWtX0tPTSU9P9/TObtiwgYKCgjp/EenUqROdOnXij3/8I1deeSVvvPGGp86kpCRuueUWbrnlFqZOncp//vMfhVkRafb8HXbPNr6HU1XjJjW3lPV7i1i3xxyysG5vIcUVNWzOKmZzVvFhXxcR5E+3xHC6tQyn2/6tfdvGBnt9B474Hv0X20y0bduWJUuWsGvXLkJDQ486KSslJYVPP/2UsWPHYrPZeOCBB+q1h/VwRo0aRc+ePZkwYQLPPfccNTU13HbbbQwfPpwBAwZQXl7OPffcw6WXXkq7du3YvXs3y5Yt45JLLgFgypQpjBkzhk6dOpGfn8+PP/5I165dG7RmERFvEOBnJyU+jJT4MMb1bQWYK/Gk5ZWxK7eMzMJyMgoryCysIKOwgr0F5ezMKaWwvJpFO3JZtCO3zvvFhjpJjq4dl9s6Kpi4cCfx4YHEhTmJCtZkNGlaFGabibvvvptrr72Wbt26UV5ezs6dhxlUtd8zzzzDH/7wB4YOHUpsbCz33ntvg28mYbPZ+Oyzz7j99ts588wzsdvtnHvuubzwwgsAOBwOcnNzmThxIllZWcTGxnLxxRd71gh2uVxMmjSJ3bt3Ex4ezrnnnqseehGRI7DZbLSJCaFNzOE3v6mscbE1q4QNGUVs2FvEhowiNmUUUVRRQ05JJTkllaxMKzjsa/0dNuLCAmkbG3xQz24EHVqE4OfQGF1pfDbjeBczbSaKioqIiIigsLCQ8PDwOs9VVFSwc+dO2rVrR6APDZxubnQfRUROTmFZNWl5ZZ6Wnl/GnvxysosryS6qILf0yHMrAvzsdIoPJSo4gFCnHyFOv/2PDqKCA+gQF0qn+DBaRgRqrG5DKC+HYcPM4wULIOjww1K8xdHy2m+pZ1ZEREQAcxJaz+AIeraOOOzzVTVu9pVUkllYwbbsYtbvNXt2N2YUUVrlYt2eY/8rX6jTj45xoXSKD6VDi1CSo83lxZJjggkP9D/m60V+S2FWREREjkuAX+1ktP5tojzn3W5zjO7W7BKKyqspraqhpLKG0soaSitdZBdXsDWrhJ05pZRU1rA6vYDV6QWHvH9ksD/J0cGkxIXRNTHMMzEtKiSgEb+ll7LZIDGx9tiHKMyKiIjIKbHbbbSNDaFt7OHH6B5QVeNmV24pW7KK2ZJVQmpuqTmcIa+MnJIqCsqqKSgr5NfdhXVelxgRSEp8GLEhAUSFBBAdEkBUcADRIf5EhziJCQ0gNsRJeJCf7w5hCAyEL76wugpLKMyKiIhIozDH1YbRKT7skOdKK2tIzy9jV04pmzLNrX83ZBSRnmeuxpBRWHHM9/ez24gJDSAmxEn7FiF0SQijS0I4nRPCaB2ldXWbK4VZERERsVyI048uCeF0SQjn3B6JnvPFFdVsyixmZ04p+aVV5JVVkV9aRX5ZNXmlVeSVVpFTUklxRQ01boOsokqyiirZkFHEl79meN4nzOlHh7hQYkOdRIf4ExUcQOT+3t0WYU6So0NIig7C6Vc/u29K41GYFRERkSYrLNCfgW2jGdj2yOung7ncWG5JFbklVeYY3ewSNu/v4d2+r4Ti/WN1j8Zmg8TwwP3LmgXToUUonRPC6JIQRoswZ9Pu2a2shJtuMo//8x9wOq2tpxEpzIqIiIjXc/o5aBkZRMvIICCCkV3jPc9V1bjZmVPKjn0l5JWZY3MP9PIWlFWTWVhBam4ppVUu9hZWsLew4pDNJKKC/emcEEbHuFCcfg5smOHXZrNhw+xZbhsbQvvYENq3CGn8ndTcbtiwofbYhyjMioiISLMW4Genc0IYnRMOHat7gGEY5JZWkZpbRmpuKbtyy9iaVczmzGJ25ZaSX1bN4h15LN6Rd1yfmRgRSPsWISSEBxEV7E/U/klrB46TooNJDA/Ubmr1QGFWREREfJ7NZiM21ElsqLPOsmMAFdXmjmmbMotIzS2jxm1gYLD/fxiGQUFZtdn7m1NKXmnVcU1ac/rZaRMTTNuYENrFhtA6OpjIIH8igvwJP/AY6EdkcAAOhd4jUpgVj7Zt2zJlyhSmTJly2Oevu+46CgoKmDVrVqPWJSIiYqVAfwc9Wx95M4nfKiirYvu+UnbmlJJdXOEZ1pBfVk1+WRW5JZXszi+nssbNlqwStmSVHPX9nH522sWG0CHO3GiiY1wo7WNDiAjyJyjAQaC/g0CX22dDna9+bxEREZEGERkcQP82AYf08B6sxuVmT0E5O3PM0Lsrp5S9hRUUlVdTVFFjPpZXU1xZQ2WNm02ZxWzKLD7i+zmrK/l4TyEOu42HXv6FxMRoc+3fmGDaxoaQEB5IWKAfIQF+zW5og8KsiIiISCPzc9j3r5oQwlmdj3xdjcvN3oIKtu8rYVt2iefxwG5qlTW1k70MoMZt8OueQpZlH36Ig81mbikc5vQjLNCfuHCnZ1e3lpFBtIqqPfaWoQ0Ks8diGFBdZs1n+wcf15Z0r732Gg8//DC7d+/Gbrd7zl900UXExMTw+uuvs337du666y4WL15MaWkpXbt2Zdq0aYwaNeqky6usrOSee+5hxowZFBUVMWDAAJ599lkGDhwIQH5+PpMnT+a7776jpKSE1q1bc//993P99ddTVVXFXXfdxSeffEJ+fj7x8fHccsstTJ069aTrERERaW78HHaSY4JJjglmRJe4Q553uw0qa9xUFJUQvCKJGpebF67sy85Sc7e1XTll7MotZV9xpTnW14DiihqKK2qgsILNWYfv7fV32EiKNsfzto0JoW2sedyvTRShzqYVH5tWNU1RdRk83tKaz75/LwQcfWtAgMsuu4zbb7+dH3/8kZEjRwKQl5fHN998w9dffw1ASUkJ5513Ho899hhOp5O3336bsWPHsnnzZpKTk0+qvD//+c988sknvPXWW7Rp04Ynn3yS0aNHs23bNqKjo3nggQfYsGEDs2fPJjY2lm3btlFeXg7A888/z+eff86HH35IcnIy6enppKenn1QdIiIivsputxEU4CAoNgLm/YATOOcw1xmGGXrNIFtNcUUNRRXmsmR7CyrYU1DGnoJy8zi/nCqXmx37Stmxr7TO+8y+cxhdE8Mb5bsdL4XZZiAqKooxY8Ywffp0T5j9+OOPiY2NZcSIEQD07t2b3r17e17zt7/9jZkzZ/L5558zefLkE/7M0tJSXn75Zd58803GjBkDwH/+8x/mzJnD//73P+655x7S0tLo27cvAwYMAMwJZgekpaWRkpLCGWecgc1mo02bNif79UVEROQYbDabOVHM30GLsKNvqOByG2QUlpOaW8bOnFJSc0vZmWMuWdYmJriRKj5+CrPH4h9s9pBa9dnHacKECdx00038+9//xul08t577/H73//eM+ygpKSEhx9+mK+++oqMjAxqamooLy8nLS3tpErbvn071dXVnH766bXl+vszaNAgNm7cCMCtt97KJZdcwsqVKznnnHMYN24cQ4cOBcyVEc4++2w6d+7MueeeywUXXMA55xzu75IiIiLSmBx2G62jgmkdFczpHWOtLueY7Me+xMfZbOY/9VvRTmDbvLFjx2IYBl999RXp6eksWLCACRMmeJ6/++67mTlzJo8//jgLFixg9erV9OzZk6qqqob4VQNgzJgxpKam8sc//pG9e/cycuRI7r77bgD69evHzp07+dvf/kZ5eTmXX345l156aYPVIiIi0qxVVsLNN5utstLqahqVwmwzERgYyMUXX8x7773H+++/T+fOnenXr5/n+Z9//pnrrruO8ePH07NnTxISEti1a9dJf16HDh0ICAjg559/9pyrrq5m2bJldOvWzXOuRYsWXHvttbz77rs899xzvPbaa57nwsPDueKKK/jPf/7DBx98wCeffEJe3vHtrCIiIiIHcbth5UqzaTtb8VYTJkzgggsuYP369Vx99dV1nktJSeHTTz9l7Nix2Gw2HnjgAdyn8B97SEgIt956K/fccw/R0dEkJyfz5JNPUlZWxg033ADAgw8+SP/+/enevTuVlZV8+eWXdO3aFYBnnnmGxMRE+vbti91u56OPPiIhIYHIyMiTrklERER8j8JsM/K73/2O6OhoNm/ezFVXXVXnuWeeeYY//OEPDB06lNjYWO69916KiopO6fOeeOIJ3G4311xzDcXFxQwYMIBvv/2WqChzkeiAgACmTp3Krl27CAoKYtiwYcyYMQOAsLAwnnzySbZu3YrD4WDgwIF8/fXXdZYWExERETkWm2EYhtVFNKaioiIiIiIoLCwkPLzu0hIVFRXs3LmTdu3aERgYaFGFcqp0H0VExOeUl8OwYebxggUQFGRtPafoaHntt9QNJiIiIiJeS2FWRERERLyWxsyKiIiINAc+OrROYVZERETE2wUFwcKFVldhCQ0zOAwfmxPX7Oj+iYiI+A6F2YP4+/sDUFZWZnElcioO3L8D91NERESaLw0zOIjD4SAyMpLs7GwAgoODsZ3AlrJiLcMwKCsrIzs7m8jISBwOh9UliYiINI6qKrjnHvP4qacgIMDaehqRwuxvJCQkAHgCrXifyMhIz30UERHxCS4XHNhi3uWytpZGpjD7GzabjcTEROLi4qiurra6HDlB/v7+6pEVERHxIQqzR+BwOBSKRERERJo4TQATEREREa+lMCsiIiIiXkthVkRERES8ls+NmT2woH5RUZHFlYiIiIjUk/Ly2lUMiorAyyexH8hpx7MRks+F2eLiYgCSkpIsrkRERESkATSj5SmLi4uJiIg46jU2w8f2/nS73ezdu5ewsLBG2RChqKiIpKQk0tPTCQ8Pb/DPk4ah+9g86D42D7qPzYPuY/PQUPfRMAyKi4tp2bIldvvRR8X6XM+s3W6ndevWjf654eHh+j9rM6D72DzoPjYPuo/Ng+5j89AQ9/FYPbIHaAKYiIiIiHgthVkRERER8VoKsw3M6XTy0EMP4XQ6rS5FToHuY/Og+9g86D42D7qPzUNTuI8+NwFMRERERJoP9cyKiIiIiNdSmBURERERr6UwKyIiIiJeS2FWRERERLyWwmwDe+mll2jbti2BgYEMHjyYpUuXWl2SHMW0adMYOHAgYWFhxMXFMW7cODZv3lznmoqKCiZNmkRMTAyhoaFccsklZGVlWVSxHMsTTzyBzWZjypQpnnO6h95hz549XH311cTExBAUFETPnj1Zvny553nDMHjwwQdJTEwkKCiIUaNGsXXrVgsrlt9yuVw88MADtGvXjqCgIDp06MDf/vY3Dp57rvvY9Pz000+MHTuWli1bYrPZmDVrVp3nj+ee5eXlMWHCBMLDw4mMjOSGG26gpKSkQepVmG1AH3zwAXfddRcPPfQQK1eupHfv3owePZrs7GyrS5MjmD9/PpMmTWLx4sXMmTOH6upqzjnnHEpLSz3X/PGPf+SLL77go48+Yv78+ezdu5eLL77YwqrlSJYtW8arr75Kr1696pzXPWz68vPzOf300/H392f27Nls2LCBp59+mqioKM81Tz75JM8//zyvvPIKS5YsISQkhNGjR1NRUWFh5XKwf/zjH7z88su8+OKLbNy4kX/84x88+eSTvPDCC55rdB+bntLSUnr37s1LL7102OeP555NmDCB9evXM2fOHL788kt++uknbr755oYp2JAGM2jQIGPSpEmen10ul9GyZUtj2rRpFlYlJyI7O9sAjPnz5xuGYRgFBQWGv7+/8dFHH3mu2bhxowEYixYtsqpMOYzi4mIjJSXFmDNnjjF8+HDjzjvvNAxD99Bb3HvvvcYZZ5xxxOfdbreRkJBgPPXUU55zBQUFhtPpNN5///3GKFGOw/nnn2/84Q9/qHPu4osvNiZMmGAYhu6jNwCMmTNnen4+nnu2YcMGAzCWLVvmuWb27NmGzWYz9uzZU+81qme2gVRVVbFixQpGjRrlOWe32xk1ahSLFi2ysDI5EYWFhQBER0cDsGLFCqqrq+vc1y5dupCcnKz72sRMmjSJ888/v869At1Db/H5558zYMAALrvsMuLi4ujbty//+c9/PM/v3LmTzMzMOvcxIiKCwYMH6z42IUOHDmXu3Lls2bIFgDVr1rBw4ULGjBkD6D56o+O5Z4sWLSIyMpIBAwZ4rhk1ahR2u50lS5bUe01+9f6OAkBOTg4ul4v4+Pg65+Pj49m0aZNFVcmJcLvdTJkyhdNPP50ePXoAkJmZSUBAAJGRkXWujY+PJzMz04Iq5XBmzJjBypUrWbZs2SHP6R56hx07dvDyyy9z1113cf/997Ns2TLuuOMOAgICuPbaaz336nC/x+o+Nh333XcfRUVFdOnSBYfDgcvl4rHHHmPChAkAuo9e6HjuWWZmJnFxcXWe9/PzIzo6ukHuq8KsyBFMmjSJdevWsXDhQqtLkROQnp7OnXfeyZw5cwgMDLS6HDlJbrebAQMG8PjjjwPQt29f1q1bxyuvvMK1115rcXVyvD788EPee+89pk+fTvfu3Vm9ejVTpkyhZcuWuo9SbzTMoIHExsbicDgOmSGdlZVFQkKCRVXJ8Zo8eTJffvklP/74I61bt/acT0hIoKqqioKCgjrX6742HStWrCA7O5t+/frh5+eHn58f8+fP5/nnn8fPz4/4+HjdQy+QmJhIt27d6pzr2rUraWlpAJ57pd9jm7Z77rmH++67j9///vf07NmTa665hj/+8Y9MmzYN0H30RsdzzxISEg6Z7F5TU0NeXl6D3FeF2QYSEBBA//79mTt3ruec2+1m7ty5DBkyxMLK5GgMw2Dy5MnMnDmTH374gXbt2tV5vn///vj7+9e5r5s3byYtLU33tYkYOXIka9euZfXq1Z42YMAAJkyY4DnWPWz6Tj/99EOWxduyZQtt2rQBoF27diQkJNS5j0VFRSxZskT3sQkpKyvDbq8bNRwOB263G9B99EbHc8+GDBlCQUEBK1as8Fzzww8/4Ha7GTx4cP0XVe9TysRjxowZhtPpNN58801jw4YNxs0332xERkYamZmZVpcmR3DrrbcaERERxrx584yMjAxPKysr81xzyy23GMnJycYPP/xgLF++3BgyZIgxZMgQC6uWYzl4NQPD0D30BkuXLjX8/PyMxx57zNi6davx3nvvGcHBwca7777rueaJJ54wIiMjjc8++8z49ddfjYsuusho166dUV5ebmHlcrBrr73WaNWqlfHll18aO3fuND799FMjNjbW+POf/+y5Rvex6SkuLjZWrVplrFq1ygCMZ555xli1apWRmppqGMbx3bNzzz3X6Nu3r7FkyRJj4cKFRkpKinHllVc2SL0Ksw3shRdeMJKTk42AgABj0KBBxuLFi60uSY4COGx74403PNeUl5cbt912mxEVFWUEBwcb48ePNzIyMqwrWo7pt2FW99A7fPHFF0aPHj0Mp9NpdOnSxXjttdfqPO92u40HHnjAiI+PN5xOpzFy5Ehj8+bNFlUrh1NUVGTceeedRnJyshEYGGi0b9/e+Mtf/mJUVlZ6rtF9bHp+/PHHw/5ZeO211xqGcXz3LDc317jyyiuN0NBQIzw83Lj++uuN4uLiBqnXZhgHbcMhIiIiIuJFNGZWRERERLyWwqyIiIiIeC2FWRERERHxWgqzIiIiIuK1FGZFRERExGspzIqIiIiI11KYFRERERGvpTArIiIiIl5LYVZExIfYbDZmzZpldRkiIvVGYVZEpJFcd9112Gy2Q9q5555rdWkiIl7Lz+oCRER8ybnnnssbb7xR55zT6bSoGhER76eeWRGRRuR0OklISKjToqKiAHMIwMsvv8yYMWMICgqiffv2fPzxx3Vev3btWn73u98RFBRETEwMN998MyUlJXWuef311+nevTtOp5PExEQmT55c5/mcnBzGjx9PcHAwKSkpfP75557n8vPzmTBhAi1atCAoKIiUlJRDwreISFOiMCsi0oQ88MADXHLJJaxZs4YJEybw+9//no0bNwJQWlrK6NGjiYqKYtmyZXz00Ud8//33dcLqyy+/zKRJk7j55ptZu3Ytn3/+OR07dqzzGY888giXX345v/76K+eddx4TJkwgLy/P8/kbNmxg9uzZbNy4kZdffpnY2NjG+wUQETlBNsMwDKuLEBHxBddddx3vvvsugYGBdc7ff//93H///dhsNm655RZefvllz3OnnXYa/fr149///jf/+c9/uPfee0lPTyckJASAr7/+mrFjx7J3717i4+Np1aoV119/PX//+98PW4PNZuOvf/0rf/vb3wAzIIeGhjJ79mzOPfdcLrzwQmJjY3n99dcb6FdBRKR+acysiEgjGjFiRJ2wChAdHe05HjJkSJ3nhgwZwurVqwHYuHEjvXv39gRZgNNPPx23283mzZux2Wzs3buXkSNHHrWGXr16eY5DQkIIDw8nOzsbgFtvvZVLLrmElStXcs455zBu3DiGDh16Ut9VRKQxKMyKiDSikJCQQ/7Zv74EBQUd13X+/v51frbZbLjdbgDGjBlDamoqX3/9NXPmzGHkyJFMmjSJf/7zn/Ver4hIfdCYWRGRJmTx4sWH/Ny1a1cAunbtypo1aygtLfU8//PPP2O32+ncuTNhYWG0bduWuXPnnlINLVq04Nprr+Xdd9/lueee47XXXjul9xMRaUjqmRURaUSVlZVkZmbWOefn5+eZZPXRRx8xYMAAzjjjDN577z2WLl3K//73PwAmTJjAQw89xLXXXsvDDz/Mvn37uP3227nmmmuIj48H4OGHH+aWW24hLi6OMWPGUFxczM8//8ztt99+XPU9+OCD9O/fn+7du1NZWcmXX37pCdMiIk2RwqyISCP65ptvSExMrHOuc+fObNq0CTBXGpgxYwa33XYbiYmJvP/++3Tr1g2A4OBgvv32W+68804GDhxIcHAwl1xyCc8884znva699loqKip49tlnufvuu4mNjeXSSy897voCAgKYOnUqu3btIigoiGHDhjFjxox6+OYiIg1DqxmIiDQRNpuNmTNnMm7cOKtLERHxGhozKyIiIiJeS2FWRERERLyWxsyKiDQRGvUlInLi1DMrIiIiIl5LYVZEREREvJbCrIiIiIh4LYVZEREREfFaCrMiIiIi4rUUZkVERETEaynMioiIiIjXUpgVEREREa/1/1Hxthj3/5wxAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 6))\n",
    "\n",
    "plt.plot(train_loss_history, label='train loss')\n",
    "plt.plot(val_loss_history, label='val loss')\n",
    "\n",
    "# the epoch with best validation loss\n",
    "plt.axvline(x=best_epoch, color='r', linestyle='--', alpha=0.8)\n",
    "\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.title('Loss History')\n",
    "\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "f1da9990",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:07:59.375308Z",
     "iopub.status.busy": "2024-03-23T07:07:59.375002Z",
     "iopub.status.idle": "2024-03-23T07:07:59.588686Z",
     "shell.execute_reply": "2024-03-23T07:07:59.587895Z"
    },
    "executionInfo": {
     "elapsed": 5,
     "status": "ok",
     "timestamp": 1711122964006,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "6GVW2-wn2pxC",
    "outputId": "dd06f933-a761-4d54-bf3a-d22c7693f06c",
    "papermill": {
     "duration": 0.240048,
     "end_time": "2024-03-23T07:07:59.590671",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.350623",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAIjCAYAAAAQgZNYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACMjklEQVR4nOzdd3gU5drH8e+mbUJIAUISQg299yJdBUUFFJHuERAUG4qiHgUbylHUo9jLsYCNpiK+2KUICiIgSO811IQA6X133j+GbBJSSEKSTbK/z3XNxezszOyzWcQ7997P/VgMwzAQEREREamA3Jw9ABERERGR4lIwKyIiIiIVloJZEREREamwFMyKiIiISIWlYFZEREREKiwFsyIiIiJSYSmYFREREZEKS8GsiIiIiFRYCmZFREREpMJSMCsiIoVy5ZVXcuWVVzp7GCIiOSiYFZEK7d1338VisdCtWzdnD6VCWbVqFRaLha+//jrP58ePH0/VqlUv+3X+/PNPZsyYQUxMzGXfS0QkLwpmRaRCmzdvHg0aNGDDhg0cOHDA2cOp1H799Vd+/fXXIl3z559/8uyzzyqYFZFSo2BWRCqsw4cP8+effzJ79mxq1qzJvHnznD2kfCUmJjp7CJfNy8sLLy8vZw8DwzBITk529jBEpJxQMCsiFda8efOoVq0aAwcOZNiwYfkGszExMTz00EM0aNAAq9VKnTp1GDt2LNHR0Y5zUlJSmDFjBk2bNsXb25tatWoxdOhQDh48CGR9Lb9q1aoc9z5y5AgWi4VPPvnEcSzzK/qDBw9yww034Ofnx6233grAH3/8wfDhw6lXrx5Wq5W6devy0EMP5Rmc7dmzhxEjRlCzZk18fHxo1qwZTzzxBAC//fYbFouFJUuW5Lpu/vz5WCwW1q1bV6Sf56XkVTP71ltv0apVK6pUqUK1atXo3Lkz8+fPB2DGjBk8+uijAISHh2OxWLBYLBw5cgSAjIwMZs6cSaNGjbBarTRo0IDp06eTmpqa4zUaNGjAoEGD+OWXX+jcuTM+Pj7873//o2/fvrRr1y7PsTZr1owBAwaU6PsXkfLJw9kDEBEprnnz5jF06FC8vLwYPXo07733Hhs3bqRLly6OcxISEujduze7d+9mwoQJdOzYkejoaJYuXcrx48cJCgrCZrMxaNAgVqxYwahRo5gyZQrx8fEsW7aMHTt20KhRoyKPLSMjgwEDBtCrVy9eeeUVqlSpAsBXX31FUlIS99xzDzVq1GDDhg289dZbHD9+nK+++spx/bZt2+jduzeenp5MmjSJBg0acPDgQb777juef/55rrzySurWrcu8efO4+eabc/1cGjVqRPfu3S85zvj4+BxBfaaLA8q8fPjhhzzwwAMMGzaMKVOmkJKSwrZt21i/fj1jxoxh6NCh7Nu3jwULFvDaa68RFBQEQM2aNQG44447+PTTTxk2bBgPP/ww69evZ9asWezevTtXkL53715Gjx7NXXfdxZ133kmzZs2oWrUqd955Jzt27KB169aOczdu3Mi+fft48sknL/keRKQSMEREKqC///7bAIxly5YZhmEYdrvdqFOnjjFlypQc5z399NMGYHzzzTe57mG32w3DMIw5c+YYgDF79ux8z/ntt98MwPjtt99yPH/48GEDMObOnes4Nm7cOAMwHn/88Vz3S0pKynVs1qxZhsViMY4ePeo41qdPH8PPzy/HsezjMQzDmDZtmmG1Wo2YmBjHsaioKMPDw8N45plncr1Odpnvp6DN19c3xzV9+/Y1+vbt63h80003Ga1atSrwdf773/8agHH48OEcx7ds2WIAxh133JHj+COPPGIAxsqVKx3H6tevbwDGzz//nOPcmJgYw9vb23jsscdyHH/ggQcMX19fIyEhocCxiUjloDIDEamQ5s2bR0hICFdddRUAFouFkSNHsnDhQmw2m+O8xYsX065du1zZy8xrMs8JCgri/vvvz/ec4rjnnntyHfPx8XHsJyYmEh0dTY8ePTAMg3/++QeAM2fO8PvvvzNhwgTq1auX73jGjh1Lampqjo4EixYtIiMjg3/961+FGuPTTz/NsmXLcm3XXnvtJa8NDAzk+PHjbNy4sVCvld2PP/4IwNSpU3Mcf/jhhwH44YcfchwPDw/PVTYQEBDATTfdxIIFCzAMAwCbzcaiRYsYMmQIvr6+RR6XiFQ8CmZFpMKx2WwsXLiQq666isOHD3PgwAEOHDhAt27diIyMZMWKFY5zDx48mOMr6LwcPHiQZs2a4eFRcpVXHh4e1KlTJ9fxiIgIxo8fT/Xq1alatSo1a9akb9++AMTGxgJw6NAhgEuOu3nz5nTp0iVHrfC8efO44ooraNy4caHG2aZNG/r3759rq1Wr1iWvfeyxx6hatSpdu3alSZMm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euLu7u441qJFC06fPk1aWhpeXl65rrFarVit1pIdfGnKXmKQWS97YbGEVrUD8PZ0z+9KEREREZfjtMysl5cXnTp1YsWKFY5jdrudFStW0L179zyv6dmzJwcOHMButzuO7du3j1q1auUZyFZIR7JN/rpg1ymzzredsrIiIiKSFx8f+Ptvc/PxcfZoypRTywymTp3Khx9+yKeffsru3bu55557SExMdHQ3GDt2LNOmTXOcf88993Du3DmmTJnCvn37+OGHH3jhhRe47777nPUWSpYtAyIuTH7LNvnrdGwKAHWqudZfThEREZFLcWprrpEjR3LmzBmefvppTp8+Tfv27fn5558dk8IiIiJwc8uKt+vWrcsvv/zCQw89RNu2balduzZTpkzhsccec9ZbKFln9pj1stYACGntOHzqQjAbGqBgVkRERCQ7pwazAJMnT2by5Ml5Prdq1apcx7p3785ff/1VyqNykqRo80//MEe9LMCp2GQAagV4O2NUIiIiUt6lpcFTT5n7M2dCZSm/LIQK1c2g0kuOMf/0CXQcstsNImNTAQWzIiIikg+bDVasMDcXW862yMFsgwYNeO6554iIiCiN8bi2lBjzT5+sXrLnktJIs9mxWCDYT8GsiIiISHZFDmYffPBBvvnmGxo2bMg111zDwoULSU1NLY2xuZ5kswUX3oGOQ6dizHrZoKpWvDyUSBcRERHJrljB7JYtW9iwYQMtWrTg/vvvp1atWkyePJnNmzeXxhhdRx5lBpn1smEqMRARERHJpdipvo4dO/Lmm29y8uRJnnnmGT766CO6dOlC+/btmTNnDoZhlOQ4XUNmmUG2zOzpuMxOBgpmRURERC5W7G4G6enpLFmyhLlz57Js2TKuuOIKJk6cyPHjx5k+fTrLly9n/vz5JTnWys+Rmc2qmT15ocygltpyiYiIiORS5GB28+bNzJ07lwULFuDm5sbYsWN57bXXaN68ueOcm2++mS5dupToQF1CZs1stjKD02rLJSIiIpKvIgezXbp04ZprruG9995jyJAheHp65jonPDycUaNGlcgAXUoeZQZZCyYomBUREZF8eHvDH39k7buQIgezhw4don79+gWe4+vry9y5c4s9KJeV5wQwlRmIiIjIJVgs4OOasUKRJ4BFRUWxfv36XMfXr1/P33//XSKDclkX9Zk1DIPTjmDWtX7LEhER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JUuW4O3tnec506ZNIzY21rEdO3asjEeZJbPMwF81syIiIlLSYmLMzcV4OPPFg4KCcHd3JzIyMsfxyMhIQkNDC7z2lVde4cUXX2T58uW0bds23/OsVivWclIIrdZcIiIiIiXLqZlZLy8vOnXqlGPyVuZkru7du+d73csvv8zMmTP5+eef6dy5c1kMtURk1cxqApiIiIhISXBqZhZg6tSpjBs3js6dO9O1a1def/11EhMTuf322wEYO3YstWvXZtasWQC89NJLPP3008yfP58GDRo4amurVq1K1apVnfY+LiXdZic+NQNQay4RERGRkuL0YHbkyJGcOXOGp59+mtOnT9O+fXt+/vlnx6SwiIgI3LI1/33vvfdIS0tj2LBhOe7zzDPPMGPGjLIcepFkZmUB/L2d/mMXERERqRTKRVQ1efJkJk+enOdzq1atyvH4yJEjpT+gUpC5+peftwce7hV63p2IiIhIuVEugllXEKMesyIiIlJa3NygZcusfReiYLaMxCZpKVsREREpJVYrfPaZs0fhFK4VujuRY8EELWUrIiIiUmIUzJYRR2ZWZQYiIiIiJUbBbBnJrJlVmYGIiIiUuJQUGDzY3FJSnD2aMqWa2TKi1b9ERESk1BgGnDqVte9ClJktI3HqZiAiIiJS4hTMlhFHay5NABMREREpMQpmy0hMktnNwF9lBiIiIiIlRsFsGdGiCSIiIiIlT8FsGVHNrIiIiEjJUzeDMmAYhqObgVpziYiISImzWKBhw6x9F6JgtgwkptnIsJttMjQBTEREREqctzd8+aWzR+EUKjMoA5mTv7w83PD21I9cREREpKQosioDsclZCyZYXCz1LyIiIlKaFMyWgVjVy4qIiEhpSkmBESPMTcvZSklTWy4REREpVYYBhw5l7bsQZWbLQGaZQYAmf4mIiIiUKAWzZUBtuURERERKh4LZMhCTbHYzUJmBiIiISMlSMFsGMieABSozKyIiIlKiFMyWgVhNABMREREpFepmUAYya2b9lZkVERGR0mCxQK1aWfsuRMFsGchqzaVuBiIiIlIKvL3hu++cPQqnUJlBGYhLVs2siIiISGlQMFsGYpLMbgZqzSUiIiJSshTMlrK0DDuJaTZAE8BERESklKSmwtix5paa6uzRlCnVzJayzE4GFgv4eSuYFRERkVJgt8OuXVn7LkSZ2VKWGcz6WT1wd3Ot2YUiIiIipU3BbCmLdaz+pU4GIiIiIiVNwWwpy+wxq3pZERERkZKnYLaUZZYZqJOBiIiISMlTMFvKMjOzCmZFRERESp66GZSyrNW/FMyKiIhIKQoMdPYInELBbCmLvbBgQqCPJoCJiIhIKfHxgeXLnT0Kp1CZQSmrU60KnepXo0GQr7OHIiIiIlLpWAzDMJw9iLIUFxdHQEAAsbGx+Pv7O3s4IiIiInKRosRrysyKiIiIVHSpqTBpkrlpOVsRERERqVDsdti8OWvfhSgzKyIiIiIVloJZEREREamwFMyKiIiISIWlYFZEREREKiwFsyIiIiJSYambgYiIiEhl4O3t7BE4hYJZERERkYrOxwfWrHH2KJxCZQYiIiIiUmEpmBURERGRCkvBrIiIiEhFl5YGU6aYW1qas0dTplQzKyIiIlLR2Wywdm3WvgtRZlZEREREKiwFsyIiIiJSYSmYFREREZEKS8GsiIiIiFRYCmZFREREpMJyuW4GhmEAEBcX5+SRiIiIiJSQ5OSsLgZxcZCe7tzxXKbMOC0zbiuIywWz8fHxANStW9fJIxEREREpBaGhzh5BiYmPjycgIKDAcyxGYULeSsRut3Py5En8/PywWCyl/npxcXHUrVuXY8eO4e/vX+qvJ6VDn2PloM+xctDnWDnoc6wcSutzNAyD+Ph4wsLCcHMruCrW5TKzbm5u1KlTp8xf19/fX/+xVgL6HCsHfY6Vgz7HykGfY+VQGp/jpTKymTQBTEREREQqLAWzIiIiIlJhKZgtZVarlWeeeQar1ersochl0OdYOehzrBz0OVYO+hwrh/LwObrcBDARERERqTyUmRURERGRCkvBrIiIiIhUWApmRURERKTCUjArIiIiIhWWgtlS9s4779CgQQO8vb3p1q0bGzZscPaQpACzZs2iS5cu+Pn5ERwczJAhQ9i7d2+Oc1JSUrjvvvuoUaMGVatW5ZZbbiEyMtJJI5ZLefHFF7FYLDz44IOOY/oMK4YTJ07wr3/9ixo1auDj40ObNm34+++/Hc8bhsHTTz9NrVq18PHxoX///uzfv9+JI5aL2Ww2nnrqKcLDw/Hx8aFRo0bMnDmT7HPP9TmWP7///juDBw8mLCwMi8XCt99+m+P5wnxm586d49Zbb8Xf35/AwEAmTpxIQkJCqYxXwWwpWrRoEVOnTuWZZ55h8+bNtGvXjgEDBhAVFeXsoUk+Vq9ezX333cdff/3FsmXLSE9P59prryUxMdFxzkMPPcR3333HV199xerVqzl58iRDhw514qglPxs3buR///sfbdu2zXFcn2H5d/78eXr27Imnpyc//fQTu3bt4tVXX6VatWqOc15++WXefPNN3n//fdavX4+vry8DBgwgJSXFiSOX7F566SXee+893n77bXbv3s1LL73Eyy+/zFtvveU4R59j+ZOYmEi7du1455138ny+MJ/Zrbfeys6dO1m2bBnff/89v//+O5MmTSqdARtSarp27Wrcd999jsc2m80ICwszZs2a5cRRSVFERUUZgLF69WrDMAwjJibG8PT0NL766ivHObt37zYAY926dc4apuQhPj7eaNKkibFs2TKjb9++xpQpUwzD0GdYUTz22GNGr1698n3ebrcboaGhxn//+1/HsZiYGMNqtRoLFiwoiyFKIQwcONCYMGFCjmNDhw41br31VsMw9DlWBICxZMkSx+PCfGa7du0yAGPjxo2Oc3766SfDYrEYJ06cKPExKjNbStLS0ti0aRP9+/d3HHNzc6N///6sW7fOiSOTooiNjQWgevXqAGzatIn09PQcn2vz5s2pV6+ePtdy5r777mPgwIE5PivQZ1hRLF26lM6dOzN8+HCCg4Pp0KEDH374oeP5w4cPc/r06RyfY0BAAN26ddPnWI706NGDFStWsG/fPgC2bt3KmjVruP766wF9jhVRYT6zdevWERgYSOfOnR3n9O/fHzc3N9avX1/iY/Io8TsKANHR0dhsNkJCQnIcDwkJYc+ePU4alRSF3W7nwQcfpGfPnrRu3RqA06dP4+XlRWBgYI5zQ0JCOH36tBNGKXlZuHAhmzdvZuPGjbme02dYMRw6dIj33nuPqVOnMn36dDZu3MgDDzyAl5cX48aNc3xWef0bq8+x/Hj88ceJi4ujefPmuLu7Y7PZeP7557n11lsB9DlWQIX5zE6fPk1wcHCO5z08PKhevXqpfK4KZkXycd9997Fjxw7WrFnj7KFIERw7dowpU6awbNkyvL29nT0cKSa73U7nzp154YUXAOjQoQM7duzg/fffZ9y4cU4enRTWl19+ybx585g/fz6tWrViy5YtPPjgg4SFhelzlBKjMoNSEhQUhLu7e64Z0pGRkYSGhjppVFJYkydP5vvvv+e3336jTp06juOh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",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 6))\n",
    "\n",
    "plt.plot(train_acc_history, label='train accuracy')\n",
    "plt.plot(val_acc_history, label='val accuracy')\n",
    "\n",
    "# the epoch with best validation accuracy\n",
    "plt.axvline(x=best_epoch, color='r', linestyle='--', alpha=0.8)\n",
    "\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('Accuracy History')\n",
    "\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6597cddd",
   "metadata": {
    "id": "WXCDoKK6IO6t",
    "papermill": {
     "duration": 0.024618,
     "end_time": "2024-03-23T07:07:59.639736",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.615118",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Test the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "88461c65",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-03-23T07:07:59.689828Z",
     "iopub.status.busy": "2024-03-23T07:07:59.689158Z",
     "iopub.status.idle": "2024-03-23T07:07:59.861453Z",
     "shell.execute_reply": "2024-03-23T07:07:59.860445Z"
    },
    "executionInfo": {
     "elapsed": 615,
     "status": "ok",
     "timestamp": 1711122973657,
     "user": {
      "displayName": "Jiuming Wang",
      "userId": "02779250306311152610"
     },
     "user_tz": -480
    },
    "id": "RZ3MA0riIQgx",
    "outputId": "81563930-78e6-4368-965b-2dee1d98d574",
    "papermill": {
     "duration": 0.199421,
     "end_time": "2024-03-23T07:07:59.863341",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.663920",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total number of test data: 280, correct=221, test acc=0.7893\n"
     ]
    }
   ],
   "source": [
    "# test the model\n",
    "test_preds = []\n",
    "\n",
    "model.load_state_dict(torch.load('rna_type_checkpoint.pt')['model_state_dict'])\n",
    "\n",
    "model.eval()\n",
    "\n",
    "for batch in test_loader:\n",
    "    x, y = batch\n",
    "    x, y = x.to(device).float(), y.to(device).long()\n",
    "\n",
    "    output = model(x)\n",
    "\n",
    "    _, y_pred = torch.max(output.data, 1)  # argmax in y_pred\n",
    "    # print(y_pred.shape)\n",
    "\n",
    "    test_preds.append(y_pred.cpu().numpy())\n",
    "\n",
    "\n",
    "test_preds = np.concatenate(test_preds)\n",
    "\n",
    "total = len(y_test)\n",
    "correct = np.sum(test_preds == y_test)\n",
    "\n",
    "print(f'total number of test data: {total}, correct={correct}, test acc={correct/total:.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9b44967",
   "metadata": {
    "papermill": {
     "duration": 0.023961,
     "end_time": "2024-03-23T07:07:59.911646",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.887685",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "### Applying RNA-FM for other intersting downstream tasks?\n",
    "\n",
    "The general workflow is the same as above: get your sequence, generate the FM embeddings, and use the FM embeddings as inputs to your own downstream model.\n",
    "\n",
    "In the above example, we have only used one fully-connected layer in our downstream model. However, as the problem becomes more complex and the dataset grows, we can also adopt more sophisticated models to further improve the performance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "616a26c0",
   "metadata": {
    "papermill": {
     "duration": 0.023721,
     "end_time": "2024-03-23T07:07:59.959255",
     "exception": false,
     "start_time": "2024-03-23T07:07:59.935534",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "authorship_tag": "ABX9TyOLpnTULKLnhuGp8BspX6yu",
   "gpuType": "T4",
   "machine_shape": "hm",
   "provenance": []
  },
  "kaggle": {
   "accelerator": "gpu",
   "dataSources": [
    {
     "datasetId": 4650806,
     "sourceId": 7916214,
     "sourceType": "datasetVersion"
    }
   ],
   "dockerImageVersionId": 30674,
   "isGpuEnabled": true,
   "isInternetEnabled": true,
   "language": "python",
   "sourceType": "notebook"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 231.102445,
   "end_time": "2024-03-23T07:08:02.452003",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2024-03-23T07:04:11.349558",
   "version": "2.5.0"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "042f1bc5960742c6882b8aa06195878b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_fddbd07580f04601b4ad44c8e03370d3",
        "IPY_MODEL_941af0086e7642fe9c406cdbf08416ad",
        "IPY_MODEL_2f433b6c9b184135b93cda4aa1755771"
       ],
       "layout": "IPY_MODEL_6232f25f22db45eba24a25613c876a75"
      }
     },
     "05e1501e661d4ddf9081d60c545eed63": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "0aeda86e0fe94388b0d9d361bb4e9bc7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "0db33754e1ae44898c63cd421ec0b05e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_114f2c3b909645b6979e02f5c3a217ba",
       "max": 107.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_c0947cbdb51244a3b844d59ca3a2fbff",
       "value": 107.0
      }
     },
     "114f2c3b909645b6979e02f5c3a217ba": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "116611b5ea1840058f12a72daa713706": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_fae639b3ffe748e8969f8b74fb1582d1",
       "placeholder": "​",
       "style": "IPY_MODEL_a3c0ff8d7de943a2ae2a6bd8f604025d",
       "value": " 100/100 [01:13&lt;00:00,  1.35it/s]"
      }
     },
     "1c95961cafd8474ab083fd6cd71fa18c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "2991a8509dcf432493698ece3da8e4ce": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_1c95961cafd8474ab083fd6cd71fa18c",
       "placeholder": "​",
       "style": "IPY_MODEL_e36bf8cdb4ed4607bf9c47b41b838860",
       "value": "100%"
      }
     },
     "2f433b6c9b184135b93cda4aa1755771": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_a9f89a6199944a1fa2f5f35c08acf3c6",
       "placeholder": "​",
       "style": "IPY_MODEL_05e1501e661d4ddf9081d60c545eed63",
       "value": " 28/28 [00:34&lt;00:00,  1.28it/s]"
      }
     },
     "44c427c3646041029ef7ee165d377350": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "4b918e3c606442838ceb2fa43db44043": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6232f25f22db45eba24a25613c876a75": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "80c71abab5f64322ae622bde50336041": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_4b918e3c606442838ceb2fa43db44043",
       "placeholder": "​",
       "style": "IPY_MODEL_9c45f2d0495143589d0c630f250091c8",
       "value": " 107/107 [00:18&lt;00:00,  2.09it/s]"
      }
     },
     "92daa1d076cb43dcb485aa58decf3af4": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "941af0086e7642fe9c406cdbf08416ad": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_0aeda86e0fe94388b0d9d361bb4e9bc7",
       "max": 28.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_bde665997dd5457d9a8745ae1c0afe15",
       "value": 28.0
      }
     },
     "9c45f2d0495143589d0c630f250091c8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "a3c0ff8d7de943a2ae2a6bd8f604025d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "a40e7f37542b40f091d8143b3c616270": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "a9f89a6199944a1fa2f5f35c08acf3c6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "abfebc0240b346d2b805f61424863ff4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "bde665997dd5457d9a8745ae1c0afe15": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "c0947cbdb51244a3b844d59ca3a2fbff": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "c973b20c9b2247469a1b4eda02bc1b75": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_92daa1d076cb43dcb485aa58decf3af4",
       "placeholder": "​",
       "style": "IPY_MODEL_df84e805107d4bddbf7b5634ae66611f",
       "value": "100%"
      }
     },
     "df84e805107d4bddbf7b5634ae66611f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "df9c81b9c90e4d71b66df65ee9254aa5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "e36bf8cdb4ed4607bf9c47b41b838860": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "e700c42b38b64c5fbd55b789d8aeced1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "e7e0a5142b064321ae152e3b392595e3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_c973b20c9b2247469a1b4eda02bc1b75",
        "IPY_MODEL_0db33754e1ae44898c63cd421ec0b05e",
        "IPY_MODEL_80c71abab5f64322ae622bde50336041"
       ],
       "layout": "IPY_MODEL_44c427c3646041029ef7ee165d377350"
      }
     },
     "ec065c33a80940259795748f52b5b100": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_e700c42b38b64c5fbd55b789d8aeced1",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_a40e7f37542b40f091d8143b3c616270",
       "value": 100.0
      }
     },
     "f4421aaaa5f14dbf9cc8c62d599e1fbe": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_2991a8509dcf432493698ece3da8e4ce",
        "IPY_MODEL_ec065c33a80940259795748f52b5b100",
        "IPY_MODEL_116611b5ea1840058f12a72daa713706"
       ],
       "layout": "IPY_MODEL_df9c81b9c90e4d71b66df65ee9254aa5"
      }
     },
     "fae639b3ffe748e8969f8b74fb1582d1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fdaf03c89ee44b49b192a84d51defa46": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fddbd07580f04601b4ad44c8e03370d3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_fdaf03c89ee44b49b192a84d51defa46",
       "placeholder": "​",
       "style": "IPY_MODEL_abfebc0240b346d2b805f61424863ff4",
       "value": "100%"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
